%%% Latex代码开始
\documentclass[UTF8,a4paper]{book}
\usepackage{titletoc}
\usepackage{titlesec}
\usepackage[UTF8]{ctex}
\usepackage[centering,left=1in,right=1in,top=1in,bottom=1in]{geometry}
\usepackage{imakeidx}
\usepackage{multicol}
\usepackage{hyperref}  % hyper ref link
\usepackage{rotating}  % rotate a picture
\usepackage{graphicx}  % figure
\usepackage{float}     %
\usepackage{listings}  % code block
\usepackage{xcolor}
\usepackage{tabularx}  % table
\usepackage{picinpar}
\usepackage{amsthm,amsmath,amssymb,lipsum}
\usepackage{mathrsfs}
\usepackage{subcaption} 
\usepackage{caption}
\usepackage{amsmath}
\usepackage{enumerate}
\usepackage[most]{tcolorbox}  %需[most]选项加 tcolorbox才启用breakable

\lstset{
    language=C,                 % 设置语言为 C
    basicstyle=\ttfamily,       % 使用等宽字体
    numbers=left,               % 显示行号
    numberstyle=\tiny\color{gray}, % 行号样式
    keywordstyle=\color{blue},  % 关键词颜色
    commentstyle=\color{gray}, % 注释颜色
    stringstyle=\color{red},    % 字符串颜色
    breaklines=true,            % 自动换行
    frame=shadowbox,
    columns=fullflexible
}

\makeindex
\begin{document}
\title{大学生电子设计竞赛通信类赛题解题指南}
\author{全体参赛师生 编著}
\date{2024年7月}
\frontmatter
\maketitle
\chapter{序~言}
亲爱的同学们：

欢迎你们踏入全国大学生电子设计竞赛这一充满挑战与机遇的舞台。这场竞赛不仅是对你们电子设计知识、创新能力和实践水平的全面检验，更是一次在高强度团队合作中收获成长的宝贵经历。

通信类赛题作为竞赛中的重要组成部分，涉及信号的传输、处理和解析等核心技术。这类赛题往往融合了模拟电路、数字电路、嵌入式系统、信号处理算法以及无线通信技术等多学科知识，是理论与实践结合的典范。然而，通信类赛题的复杂性和实际应用的广泛性，也对选手的分析能力、系统设计能力和工程实现能力提出了更高的要求。

作为你们的导师，我深知面对赛题时可能会有的不知所措与压力，但我也坚信，科学的解题思路、扎实的理论基础和灵活的实践能力，能帮助你们在困难中找到突破口。本解题指南的初衷正是为了帮助你们更好地理解通信类赛题的内涵与规律，掌握解题的思路与方法，在竞赛中发挥出最好的水平。

在阅读本指南时，我希望你们牢记以下几点：

系统性思维：通信类赛题往往需要将多个功能模块整合到一个完整的系统中。理解整体框架，合理分工协作，是解题的基础。

工程实践能力：理论设计只是起点，落地实现才是关键。在调试中保持耐心，培养细心与创新思维，方能解决工程中的实际问题。

实验与仿真：通信类赛题对信号的分析与处理精度有较高要求，仿真工具（如MATLAB、ADS等）与测试设备的使用是不可或缺的技能。通过仿真验证设计的可行性，能有效减少试错成本。

团队合作与时间管理：竞赛时间紧张，团队合作与任务分配决定了效率与成果。明确目标、合理安排时间，是通往成功的重要保障。

最后，无论竞赛的结果如何，我都希望你们通过这次比赛真正收获知识、锻炼能力、感受到电子设计的乐趣。这不仅是一场竞赛，更是一次成长之旅，一次将理论化为现实的精彩实践。希望本指南能成为你们解题路上的一盏明灯，助你们在通信类赛题中乘风破浪，尽情展现才华！

祝你们赛出风采，学有所成！

你们的导师
[姓名]
[日期]
\chapter{前~言}
从2020年9月开始，本实验室3位教师李窦哲、吴宇坤和李付江开始组织同学进行全国大学生电子设计大赛培训，并在2021年暑假第一次参加全国大学生电子设计竞赛。迄今，共参加4次竞赛，获国家二等奖2次，省一等奖4次。通过长期的师生合作，在通信类题目和高频电路设计的备赛、解题、培训中积累了部分经验。编写本书，旨在更好的传承所积累的知识，为后续参加培训的同学提供可参考的文字资料

从2021年参赛开始，每一届参赛同学都为实验室积累了宝贵的电路软硬件设计经验，师生协力形成了丰富的知识储备，在模拟电路特别是通信电路调试，高频PCB设计，软件和算法研究中，充分将课堂知识和应用相结合，巩固、强化了基础知识，锻炼了工科同学的动手能力。

\renewcommand\contentsname{目~录}
\tableofcontents
\mainmatter
\part{竞赛知识}
全国大学生电子设计竞赛从1997年开始每二年举办一届，是教育部和工信部共同发起的大学生学科竞赛之一，也是被各大高校、电子信息类企业广泛认可的本科生国家级竞赛。该比赛可总结为三个特点，一是竞赛时间紧，需在四天三夜时间里与队友协同设计出一个带有具体功能的电路，由于题目涉及知识面广又有深度，考察综合设计能力、团队意识和队员身体，竞赛中为尽快解决问题很多同学甚至夜宿在实验室，二是赛程时间长，若想获得国奖，需经过重重考验，包括初赛、复赛和决赛，每次晋级都意味着竞争者水平越来越高，在炎热的夏季一个月的时间内闯过这些关卡难度很大，三是备赛时间久，通常需整一年时间用于从开始的基础学习到最后的综合设计，不断挑战更难的知识，牺牲了很多娱乐和休息时间，对广大青年学生提出了更高的要求。为了解决这些难题，让参赛同学有一份可靠详实的参考，本书首先阐述我实验室建立的培训计划，即近五年的真题，这些题目都提供了详细的分析和参考设计，即可作为参考，也可直接利用完成一定功能的电路模块。
\chapter{通信类赛题详解}
通信类赛题也称高频类赛题，考察以信号调理、无线收发为目的的信息处理系统的分析设计和调试能力。该类赛题是本实验室目前唯一的学习方向。训练过程中，师生将合力在约一年时间内完成约5道真题训练，助力参赛同学具有充分的知识储备上场角逐。考虑到多数参赛学生从大一暑假开始参加培训，该阶段尚未接受竞赛所需专业知识的课堂教学，而且，学生自行阅读教材速度慢，理论知识多，无法胜任比赛偏重实践的要求。因此，本实验室秉承真题为纲，随用随学的策略，即，通过教师和高年级同学完成先期培训，直接进入真题训练，遇到难题再针对解决。

\section{2019年D题：简易电路特性测试仪}
该题是所有进入实验室的学生学习和实践的第一道题，也是经过指导教师经筛选后认为最适合入门的真题。原因有三点，首先，该题属电子电路基础知识，考察了三极管共射放大电路、单片机、运算放大器知识，易掌握且与课堂理论教学同步；其次，低频电路易焊接调试，对布线、器件选型要求低；第三，该题可为后续高频电路设计奠定良好实践基础，通过学习，可在电路仿真、硬件设计、代码编写中逐步熟悉本实验室规划的竞赛学习策略。
\subsection{题目分析}
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.7]{./pdf/2019D1_1.pdf}
	\caption{2019D-题目}
	\label{2019D1_1}
\end{figure}
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.7]{./pdf/2019D1_2.pdf}
	\caption{2019D-题目}
	\label{2019D1_2}
\end{figure}
2019年国赛D题如图\ref{2019D1_1}所示。按照本题要求，基础部分应自动测量三极管共射放大电路的输入、输出电阻，增益与幅频特性曲线，发挥部分为故障判断，也需依靠输入输出电阻与增益的不同实现。本书提供的解决方案为：通过单片机（本例采用STM42F407）控制AD9854产生峰-峰值50mV、频率1kHz正弦交流信号作为激励信号，再由单片机采集经过采样电阻、负载电阻及通过待测电路的直流、交流信号，计算待测电路的输入、输出电阻等基础部分测量内容，并通过这些信号的变化判断除C1电容加倍外的其他故障；再由单片机控制AD9854发出频率为4Hz，峰-峰值60mV正弦信号，利用输入电阻的变化，判断C1电容是否加倍，细节将在\ref{section-2019d-circuit}节参考电路中阐明。

\subsection{硬件设计}
硬件框图如图\ref{2019D2_1}所示。其中，单片机控制基于AD9851的DDS模块产生激励信号。激励信号先经过事先已知阻值的采样电阻，并由放大电路一放大后，送入单片机，测量经过采样电阻后的电压信号，同时，该电压信号进入具有故障选择功能的待测电路。待测电路输出分为两路，一路经过MOS管开关电路与负载电阻连接后接地，另一路经过放大电路二后，分交流、直流两路，直流信号幅值由放大器衰减至合适范围，供单片机采集，交流信号则经过基于AD637的有效值检测模块，再由单片机采集。

\begin{figure}[!htbp]
	\centering
	\includegraphics[scale=0.8]{./pdf/2019D2_1.pdf}
	\caption{硬件流程图}
	\label{2019D2_1}
\end{figure}

\subsection{参考电路}
\label{section-2019d-circuit}
本书给出的参考电路如图\ref{2019_D3}所示。注意H2-H8为跳线，用于手动选择待测电路中的各元件是否短路或断路。以跳线H2为例，H2的2、4连接，R1正常接入，H2的1、3连接，造成R1被短路，H2不接跳线，则造成R1被断路。读者可以此类推其他跳线作用。
\begin{sidewaysfigure}[!htbp]
	\centering
	\includegraphics[scale=0.65]{./pdf/2019D3_1.pdf}
	\caption{2019年国赛D题电路原理图}
	\label{2019_D3}
\end{sidewaysfigure}
因参考电路所用的单片机的ADC电压采集范围为0$\sim$3.3V。通常，将待测信号电压调节至1$\sim$2V，数值适中，适合计算和信号处理。对于待测的三极管共射放大电路来说，送入RF1接口的激励信号不宜过大，30$\sim$50mVpp为宜，经过采样电阻R5之后的电压可降至20mVpp左右，因此需要对其进行放大。本书参考方案中，对信号放大了20倍（此放大倍数均可根据需要自行更改）方便单片机采集；对于经三极管放大后的输出信号来说，需分别对直流通路和交流通路进行信号采集，以完成故障判断；交流信号已经足够大，所以无需再放大，只需要用电容隔直，为了防止对前级的影响，用了一个放大倍数为1的反向放大器；直流通路电压一般在5$\sim$7V，所以衰减4倍以方便信号采集。

开关电路完成负载电阻接入，由管Q2、Q3和Q6共同构成，其中，Q2为N沟道增强型MOS管，型号2N7000，Q3为PNP结型晶体管，Q6为NPN结型晶体管。单片机的IO口连接至插座H1后，可利用高低电平控制待测电路是否连接负载电阻R24。当H1为低电平时，管Q6截止，Q3基极为高电平，Q3也截止，MOS管Q2的栅极为低电平而截止，负载电阻R24不接入电路；当H1为高电平时，执行相反操作，MOS管Q2导通，负载电阻R24被接入电路。

输入电阻测量：  $R_{i}=\frac{U_5*R_5}{20*(U_i-U_5/20)}$


输出电阻测量：  $R_{o}=\frac{R_{24}*(U_{open}-U_{close})}{U_{close}}$


增益：          $A_{u}=\frac{20*U_{AC(out)}}{U_{5}}$

其中$U_i$，$U_5$，$R_5$和$U_{AC(out)}$均在图中已标出（$U_i$为输入信号电压，$U_5$为$R_5$之后经过放大器（增益为20）的电压，即RF4的输出，$U_{AC(out)}$为经过三极管后的交流电压的有效值，即RF2后AD637的输出）；$U_{open}$和$U_{close}$分别为2N7000打开、闭合后的的交流电压输出。

幅频特性曲线可由单片机控制DDS扫频获得；其中上限截止频率是0.7倍的增益最高点所对应的频率，一般在120k-160k左右。

上述是基础部分的内容，对于发挥部分所要测得的12个故障，11个故障均可由输入电阻、输出电阻和增益测得；更直接的方法只需要测三个采样的数据（即采样电阻R5后的电压，三极管输出的直流分量和交流分量）；对于C1加倍的故障判断，提供以下两种判断方法：

1.用图中充放电电路进行充电，充电电压图中标注为3.3V，根据每次充放电时间的不同(用单片机采集)，来判断C1是否加倍。此方法在别的组取得成功，因为判断需要在2s内显示，需要多次实验并调整，有些费时费力。

2.采用低频信号输入，测量输入电阻。C1正常时与加倍时输入电阻有一定的变化（与其说是测量输入电阻，不如说是测量RF4（左侧最上方的SMA口）的输出信号大小），频率过低，会超时；频率过高，变化不明显，所以我们最终选择了4Hz。

观察原理图，读者可能会有疑问，RF4同样为交流输出，为何不用AD637进行有效值检波？原因是题目中要求在2s内显示故障，而用输入4Hz正弦信号判断输入电阻变化的方法只与RF4有关，若用AD637检波，时间可能会超过2s，所以用单片机处理。但若用充放电的方法，此处（RF4）可用AD637检测有效值。充放电电路部分在电路中标出，供读者测试。

\begin{sidewaystable}
	\caption{三极管故障判别方法列表}
	\begin{tabularx}{\textheight}{|p{1.2cm}|p{1.7cm}|X|X|X|X|X|X|X|X|}
	\hline
	故障 &输入信号电压 (mV) &集电极直流电压 (V) &集电极交流电压 (V) &输入电阻 (k$\Omega$) &输出电阻 (k$\Omega$) &100Hz增益 &1KHz增益 &170KHz增益 &分析\\ \hline
	正常   &15.8-16 &6.8-7.1 &2.15-2.16 &1.55-1.58 &1.91 &88-90 &137-138 &118-120 & ~ \\
	\hline
	R1断路 &19-20 &12.1-12.2 &0.001-0.006 &3.10-3.17 &1.98 &~ &0-0.3 &~ &基极失去直流偏置\\
	\hline
	R1短路 &0.8   &11.3-11.4 &0.003-0.007 &0.029-0.034 &0.00684 &~ &10.0-15.0 &~  &基极电压过高致管饱和\\
	\hline
	R2断路 &2.3-2.4 &4.18-4.24 &0.005-0.014 &0.098-0.101 &0.003 &~ &1.0-5.0 &~ &~ \\
	\hline
	R2短路 &0.4-0.45 &12.12-12.20 &0.003-0.014 &0.015-0.020 &1.97 &~ &15-30 &~ &~ \\
	\hline
	R3断路 &3.2-3.4 &0.17-0.25 &0.002-0.008 &0.14-0.15 &0.914 &~ &1.0-3 &~  &~\\
	\hline
	R3短路 &150-160 &12.16-12.20 &0.007-0.009 &1.60-1.61 &0.00132 &~ &0-1 &~  &~\\
	\hline
	R4断路 &19-20 &12.10-12.20 &0.003-0.007 &2.88-2.92 &1.98 &~ &0-1 &~ &~ \\
	\hline
	R4短路 &18-19 &0.06-0.10 &0.08-0.15 & 0.077-0.080 & 1.97 & ~ & 2.0-20.0 &~ &~ \\
	\hline
	C1加倍 &15-16 &6.86-6.90 &2.15-2.17 &1.56-1.58 &1.89 &88-89.5 &136-138 &118-120  &~\\
	\hline
	C2加倍 &15-16 &6.80-6.90 &2.20-2.22 &1.53-1.54 &1.9 &93-95 &140-142 &121-123 &~ \\
	\hline
	C3加倍 &15-16 &6.88-6.89 &2.15-2.17 &1.56-1.58 &1.91 &86-87.5 &136-137.5 &105-107 &~ \\
	\hline
	C1断路 &20-22 &7.40-7.47~ &0.006-0.012 &4.15-4.30 &~ &0-1 &0-1 &0-1 &~ \\
	\hline
	C2断路 &19.3-19.4 &7.38-7.43 &0.045-0.055 &2.88-2.89 &~ &1.0-2.5 &2.0-3.0 &2.0-3.0 &~ \\
	\hline
	C3断路 &15.8-16 &6.80-7.00 &2.18-2.20 &1.57-1.62 &~ &90-92 &137-138 &140-142  &~\\
	\hline
\end{tabularx}
\end{sidewaystable}

\normalsize
\newpage

\subsection{软件设计}
本赛题的软件设计重点在于通过单片机控制DDS产生不同频率、幅度激励信号，并采集三极管共射放大电路输出，2秒内完成参数测量和故障判别。
\subsubsection{流程概述}

软件流程图如图\ref{2019D2_2}，单片机复位后执行初始化工作，主要为设置MOS管控制电压为低，配置LCD显示界面，之后进入持续按键或屏幕触摸扫描，依据按键控制单片机进行不同工作。

首先，计算输入输出电阻以及增益。因AD9854的输出信号均在0V以上，即全都为正值，所以经放大后可以直接由单片机的ADC1端口采集。待测共射放大电路的输出信号因为三极管静态工作点，为一交流量和直流量叠加的信号，超过了单片机ADC的3.3V耐压值，所以需将此输出信号分成两路，一路利用运放衰减至ADC可接受范围，再利用ADC3采集并计算平均值，另一路通过电容隔离直流后，经由AD637得到其均方值，使用ADC2进行采集。关闭MOS管后再对输出信号的两路进行采集就可以计算出输入输出电阻和增益。

其次，绘制幅频特性曲线。需要控制AD9854的输出频率不断地升高，然后ADC采集输出信号得到输出信号的最大值，AD9854的频率可以以一定步进值增加，或者为了节省时间，也可以只选定几个频率进行幅频特性的测量，在竞赛中，我们使用了步进方法，速度较慢。

最后，故障分析。进入故障分析模式后，单片机会不断循环测量可能出现的问题，首先是进行一次初步的采集来计算输入输出电阻和增益，根据事先测量好的数据进行对比就可以判断出所有电阻的故障、C2的故障和C1断路的故障。然后提升AD9854的频率至160KHz，因为C3的加倍和断路主要影响上限截止频率，所以我们先提升频率，然后通过160KHz情况下的增益来判断C3是否出现故障。最后是C1加倍的判断，我们首先需要降低AD9854的频率至4Hz，因为电容的容抗$Z=\frac{-j}{wC}$，频率越高，电容对正弦信号的阻碍作用越小，我们当时的想法是测量通过C1后信号的有效值来判断C1的加倍，因为加倍后容抗减小，输入信号会大一点点。为了尽可能测量准确，我们使用了一个低频信号。大家不用担心4Hz的信号测量是否会超过2s的限定时间，我们当时测量的时候速度还是十分快的。


一轮循环结束所有的故障就分析完毕了，之后不会退出而是再次从1KHz测量基础信息，不断循环，除非按下复位键重启单片机。

本书提供的2019年电赛真题D的解法并非唯一，解决方案可有多种，如共射放大电路输出，也可采用电阻分压方式获得合适的单片机输入电压，读者可自行绘制电路尝试。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.7]{./pdf/2019D2_2.pdf}
	\caption{软件流程图}
	\label{2019D2_2}
\end{figure}

\subsubsection{ADC采集}
ADC采集的相关内容放在了附录\ref{chapter_mcu}的STM32系列单片机知识讲解中，请各位读者移步参阅。
\subsubsection{数据的有效值计算}
在上述分析中，我们已经了解了本题参考电路中各个数据的计算方法。总得来说，通过输入输出电阻，以及截止频率，我们就可以判断大部分的故障，唯一的难点在于电容C1加倍，对于电路特性的影响实在是太小了，我们很难对其进行精准的计算，这里给出一种可以极大提高计算精度的方式，通过对输入电压的精准计算来判断C1是否加倍。

首先对于一个正弦信号，他的瞬时值是不断变化的，而有效值是指交流电与直流电分别通过一个电阻，在一个周期内所消耗的电能相等时该直流电的值。对于直流电$W_1 = I^{2}*R*t$,而对于交流电我们需要使用微积分的思想，在一个极短的时间$\mathrm{d}t$内电流近似是不变的，$\bigtriangleup{W}=(i(t))^{2}*R*\mathrm{d}t$,对他在0$\sim$T内进行积分，$\int_{0}^{T}\bigtriangleup{W} = \int_{0}^{T}(i(t))^{2}*R*\mathrm{d}t$,我们就得到了周期信号在一个周期内的能量。

直流信号在一个周期的能量：$W_1 = I^{2}RT$


周期信号在一个周期的能量：$W_2=\int_{0}^{T}(i(t))^{2}R\mathrm{d}t$


让上两式相等，我们就得到有效值I的公式：$I=\sqrt{\frac{1}{T}\int_{0}^{T}(i(t))^{2}\mathrm{d}t}$

对于电压也是同理$$U_{rms}=\sqrt{\frac{1}{T}\int_{0}^{T}(u(t))^{2}\mathrm{d}t}$$


当$\mathrm{u(t)}=U_m\sin{t}$的时候，可以利用二倍角公式计算出$$U_{rms}=\frac{U_m}{\sqrt{2}}$$

读者对于最大值除$\sqrt{2}$这个公式肯定最为熟悉，如果希望计算ADC采集到的信号的有效值，只需遍历ADC的数组，找到最大值并且除以$\sqrt{2}$就可以算出有效值。事实上，我刚开始尝试检测C1加倍的时候也是同样的思路，C1的加倍会极小的影响输入信号的幅值，我想通过检测这个峰值的变化来判断C1是否加倍。但是我经过很长时间的测试发现这个方法实际虽然可行，但是判断的不稳定性十分高，比如我一个周期采样了100个点，这之中只会有一个最大值，而ADC的采集的时候本来就存一些误差，而且输入信号的幅度可能本身的幅值就会有小的抖动，这就导致C1不加倍时信号峰值可能在10mV$\sim$25mV，C1加倍时信号可能在15mV$\sim$30mV，测量误差过大导致二者的区分不是十分明显，测量时故障判断就一直在加倍和不加倍之间反复横跳。

导致此问题的原因是，实际上一个周期有100个采样点（以输入信号1KHz为例），但我们只用到了里面的一个最大值，这就导致测量的数据存在很大的不稳定性，我们可以想一个方法把这100个数据全都利用起来，这里利用了一个部分读者可能不熟悉的公式：$U_{rms}=\sqrt{\frac{1}{T}\int_{0}^{T}(u(t))^{2}*R*\mathrm{d}t}$，这是对连续信号平方后进行积分，我们采样后信号是100个离散的点，所以我们把这个公式转换为离散的形式
$$U_{rms}=\sqrt{\frac{1}{T}\sum_{n=0}^{n}(u(n))^{2}*\bigtriangleup{t}}$$
上式中$\bigtriangleup{t}$就是采样间隔的时间，也就是采样频率的倒数。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.2]{./fig/int.png}
	\caption{积分图}
	\label{int}
\end{figure}


从积分到离散起始就是上面这张图，当$\bigtriangleup{t}\rightarrow0$的时候求和就变成了积分。所以我们现在一个周期采集100个点，采样频率就是100kHz，$\bigtriangleup{t}=\frac{1}{10^{5}}$,也就是10us。运用上面的公式，可以算出一个周期的有效值，这次我们用上了100个点的数据，极大的降低了数据的不稳定性，当时我换上这种方法的时候C1加倍就可以十分快速且稳定的判断出来。

这是我使用for循环计算有效值的代码片段.
\begin{lstlisting}[basicstyle=\small]        %插入要显示的代码

for(int i=0;i<100;i++)
{
    if(i==0) 
        ADC1_Vrms=0; 
    ADC1_Vrms += ( (ADC1_VOLTAGE[i]-ADC1_AVERAGE) * \
                 (ADC1_VOLTAGE[i]-ADC1_AVERAGE) ) / (100.0*y);
}
ADC1_Vrms=sqrt(ADC1_Vrms*y);
\end{lstlisting}

\section{2024年C题：无线传输信号模拟系统}
本题是2024年省赛赛题，侧重考察信号在传输过程中的直射和绕射信号模拟。该题虽然署于通信类赛题，但难点在于软件设计，硬件部分相对简单，具体来说有三点，首先，该题无天线、阻抗匹配、调制和解调类的难点知识，也没有设计频率过高的信号传输，其次，该题所需的电路只需通过乘法器、衰减器、加法器、DDS等完成，搭建硬件电路相对容易，最后，DDS控制为本体难点所在，实验室一般很难具备像AD9959这样性能优秀的DDS芯片，测评过程中了解到，多数学校都是开赛后临时购买，时间非常紧张。
\subsection{题目和分析}

本书给出的参考设计以STM32H7为主控芯片，以AD9959为信号源，可产生初相、幅值可调的直达信号和时延、初相与幅值衰减相对直达信号可设置的多径信号，并最后进行合路处理。本系统通过AD9959产生四个幅度、频率和相位均可独立调节的信号，放大加偏之后通过乘法器进行AM调制，产生两路调幅信号，再对两路信号分别进行放大、衰减和调相等处理，得到直达信号和多径信号。特别地，针对多径信号的延时与调相，可由STM32H7单片机控制AD9959进行处理。经测试，该系统可按照题中要求进行调制深度、延时、信号衰减、载波频率和相移的调节，并进行合路处理，且波形无失真。测评表见图\ref{2024C-checklist-1}和图\ref{2024C-checklist-2}，测评表对测试环节中的载波、调制信号规定参数。
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.4]{./fig/2024C-checklist-1.jpg}
	\caption{2024年C题测评表1}
	\label{2024C-checklist-1}
\end{figure}
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.3]{./fig/2024C-checklist-2.jpg}
	\caption{2024年C题测评表2}
	\label{2024C-checklist-2}
\end{figure}

本题需要模拟产生直达信号（SD）和多径信号（SM），两路信号的调制度、载波均可调，并且直达信号的初相、幅值可设置，多径信号相对直达信号时延、初相与幅值衰减可调节，且合路输出信号（SOut）信号准确，波形稳定。


因为AD9854产生的波形本身自带有90°的相位差，且无法自由的控制之后产生波形的相位，AD9959可以对内部四个DDS在相同时钟内进行同步、高精度实现对频率、相位和幅度的调控，对于之后题目中对调制信号中多径传输信号中相移部分处理更为方便高效。

AD9954DDS可以同时产生两路相同频率的信号，且可以至少留有4级调制的空间去调制两条路径上相位的变化，可以方便地通过数字的方法实现高精度准确移相。

可以通过使用OPA695反向加法器进行合路处理。OPA695为超宽带电流反馈运算放大器，该芯片的增益带宽积极高，可以满足题目中所要求的频率，且更为稳定，信号的幅度可控。

\subsection{硬件设计}
为了良好地实现题目中要求的各种指标并提高系统的稳定性，需设计性能优良的乘法器电路和精确的高频信号放大电路，总体电路框图如图\ref{2024c_hardware_diagram_00.png}所示。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.6]{./pdf/2024c_hardware_diagram.pdf}
	\caption{硬件电路框图}
	\label{2024c_hardware_diagram_00.png}
\end{figure}

在图\ref{2024c_hardware_diagram_00.png}中，首先由STM32H7单片机控制AD9959产生四路信号，其中ch0和ch1输出通道产生载波信号，由ch2和ch3产生2MHz的调制信号，之后，调制信号通过OPA690放大加偏电路并且对调制信号进行放大与加偏，载波信号通过OPA695放大电路进行一次放大；然后经过AD835乘法器进行幅度调制（AM调制）；再经由OPA695放大电路进行再次放大，达到题目要求；最后多径信号经过PE4302衰减器与直达信号通过OPA695反向加法器进行合路处理；题目中所要求的相移和时延均可通过单片机软件控制AD9959实现。下面对设计中的重点AD9959、信号放大电路、AM调制电路和合路电路予以重点阐述。

\subsubsection{AD9959产生同步输出信号}

采用AD9959由四个直接数字合成器（DDS）内核组成，可在每个通道上提供独立的频率，相位和幅度控制；每个通道上有集成的10位高速ADC，具有优秀的宽带与窄带无杂散动态范围；且每个通道上都有一个专用的32位通道频率调谐字，14位相位偏移量，和一个10位的输出比例乘法器。

\subsubsection{信号放大电路}

经由AD9959产生的2MHz和40MHz信号，通过OPA690放大、加偏电路后，输入OPA95放大电路，将AD9959产生的小信号放大，两路不同频率幅度的信号经AD835乘法器电路混频，获得调幅信号。

\subsubsection{AM调制电路}

基波信号和载波信号经过放大电路后，通过AD835进行AM调制，从而生成调幅波。
\subsubsection{合路电路}

采用AD9959由四个直接数字合成器（DDS）内核组成，可在每个通道上提供独立的频率，相位和幅度控制；每个通道上有集成的10位高速ADC，具有优秀的宽带与窄带无杂散动态范围；且每个通道上都有一个专用的32位通道频率调谐字，14位相位偏移量，和一个10位的输出比例乘法器。

经由AD9959产生的2MHz和40MHz的信号，通过OPA690放大加偏电路与OPA95放大电路把AD9959产生的小信号放大，俩路不同频率幅度的信号经AD835乘法器电路产生调幅信号。

基波信号和载波信号经过放大电路后，通过AD835进行AM调制，从而生成调幅波。

两路AM信号经过放大后，通过OPA695反向加法器进行合路处理，OPA695的带宽大，增益稳定。
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.6]{./pdf/2024c_software_diagram.pdf}
	\caption{软件电路框图}
	\label{2024c_software_diagram_00.png}
\end{figure}


\subsection{软件设计}

本系统使用高性能的stm32h743作为主控芯片，结合4.3寸lcd屏幕进行数据的显示和电路参数的控制，可以非常直观的显示数据并对电路进行快速的设置。使用代码控制AD9959输出两路同频同相的高频载波以及两路2Mhz同频同相的调制信号，可以完美的生成两个完全同频同相的AM调制信号用于多径信号的仿真。结合程控衰减器PE4302可以完成对多径信号幅度的衰减，精度达到0.5db,符合题目的精度要求。

对于载波信号有效值以及调制度的要求则使用AD9959的幅度调制功能，使用示波器进行数据的测量并存入单片机，可以达到精准的载波幅度和AM信号调制度的更改。
通过单片机控制AD9959中的相位字，可以实现精度极高的移相操作，可以完成题目要求的相位更改和延时。

\subsection{测试方案及测试结果分析}

\subsubsection{测试方法}

调幅（AM）信号的调制测试

原理：调幅是将信息信号（调制信号）加到载波信号上的过程。调制度是调制信号幅度与载波信号幅度的比值。从时域上面观看
$m_{a}=\frac{A_{m}}{U_{C}}$  ，ma就是调制度，即基带调制信号的幅度除以叠加在基带调制信号上的直流偏置。从频域上面观看，调制度就是两个边频分量幅度和除以载波幅度，
$\frac{\dfrac{U_{b}{m_{1}}}{2}+\dfrac{U_{b}{m_{2}}}{2}}{U_{c}} =m_{a} $，
和边频分量幅度，为载波幅度。

测试方法：通过示波器的FFT分析，观看俩个边频信号的幅度和除以载波幅度，即可求得调制度。

多径传输信号SM的时延和幅度衰减测试

原理：多径信号的时延是指信号从发射到接收所需的时间，幅度衰减是指信号在传输过程中能量的减少。

公式：时延：$t=\tau_{2}-\tau_{1}$
幅度衰减： 其中，$\tau$是时延，和是信号到达的时间点， 是幅度衰减的分贝值， 和是信号的初始和接收幅度。
测试方法：使用示波器测量多径信号和直达信号到达的时间差来确定时延，通过观看俩路相同信号，一路正常、一路衰减进行比较观看。


\section{2023年D题：信号调制方式识别与参数估计装置}
\subsection{题目和分析}
本题要求完成信号检测和解调装置的设计，对六种信号，即无调制CW、调幅AM、调频FM、频移键控FSK、幅值键控ASK、相移键控PSK，的识别方法，利用快速傅里叶变换分析、数字解调（如微分器和包络检波）、硬件解调，完成题目要求。

下面分别阐述各种调制方式的原理、参数测量和解调方法。

\textcolor{red}{黄宇欣：AM、FM、CW、test}
\subsubsection{一、调制方式概述}

本题涉及的模拟调制方式主要包括幅度调制（AM，Amplitude Modulation）、频率调制（FM，Frequency Modulation）以及连续波（CW，Continuous Wave）。其中，幅度调制通过改变载波的幅度实现，频率调制通过改变载波的瞬时频率实现，而连续波则指未调制的纯载波信号，即输出为单一频率的正弦波。

\subsubsection{二、AM（幅度调制）}

\paragraph{1. 原理与数学表达}

幅度调制（AM）通过控制载波的幅度随调制信号变化，其标准数学表达式为：
\begin{equation}
s(t) = A_c \cdot [1 + m_a \cos(2\pi f_m t)] \cdot \cos(2\pi f_c t)
\end{equation}
式中，$A_c$为载波幅度，$f_c$为载波频率，$f_m$为调制信号频率，$m_a$为调幅系数，定义为$m_a = \frac{A_m}{A_c}$，$A_m$为调制信号幅度。表达式中的直流项（即“1”）确保调制包络始终为正，避免包络翻转现象。若移除该直流偏置，则形成抑制载波的双边带信号（DSB-SC），与本题要求的标准AM信号不同。调幅系数$m_a$反映调制深度：$m_a = 0$对应无调制，$m_a = 1$时包络波动最为明显且最低处触达零，$m_a>1$则产生过调制，导致包络翻转及解调失真。

\paragraph{2. AM信号的实现}

AM调制可通过模拟乘法器（如AD835）实现，具体做法是将含直流偏置的调制信号
\[
m(t) = 1 + m_a \cos(2\pi f_m t)
\]
与载波信号
\[
c(t) = \cos(2\pi f_c t)
\]
相乘，生成符合标准表达式的调制输出。其中直流偏置部分可通过偏置电路或数模转换模块（DAC）完成。

\paragraph{3. AM信号的解调与特性测量}

AM信号的解调采用包络检波方式，使用ADL5511模块提取信号包络。参数测量方面，载波频率$f_c$通过频谱仪直接读取信号主峰频率，调制频率$f_m$则通过主峰与边带间的频率间隔确定。调幅系数$m_a$依据包络最大值$A_{\text{max}}$与最小值$A_{\text{min}}$，按照下式计算：
\begin{equation}
m_a = \frac{A_{\text{max}} - A_{\text{min}}}{A_{\text{max}} + A_{\text{min}}}
\end{equation}
其中$A_{\text{max}}$与$A_{\text{min}}$可通过示波器观测到的包络波形获得。

\subsubsection{三、FM（频率调制）}

\paragraph{1. 原理与数学表达}

频率调制（FM）的数学表达式为：
\begin{equation}
s(t) = A_c \cdot \cos\left(2\pi f_c t + m_f \sin(2\pi f_m t)\right)
\end{equation}
其中，
\begin{itemize}
  \item $A_c$：载波幅度；
  \item $f_c$：载波中心频率；
  \item $f_m$：调制信号频率；
  \item $m_f$：调频系数，定义为$m_f = \frac{\Delta f}{f_m}$；
  \item $\Delta f$：最大频偏。
\end{itemize}

在该表达式中，相位函数$\theta(t)$为
\begin{equation}
\theta(t) = 2\pi f_c t + m_f \sin(2\pi f_m t)
\end{equation}
瞬时频率$f(t)$可由相位函数对时间求导得到：
\begin{equation}
f(t) = \frac{1}{2\pi} \frac{d\theta(t)}{dt} = f_c + m_f f_m \cos(2\pi f_m t)
\end{equation}
结合$m_f = \frac{\Delta f}{f_m}$，可进一步写为：
\begin{equation}
f(t) = f_c + \Delta f \cos(2\pi f_m t)
\end{equation}
由此可见，FM调制通过使载波瞬时频率以调制信号变化而变化，实现信息的传递。

\paragraph{2. FM信号的实现}

由于频率调制本质上属于非线性调制过程，通常采用压控振荡器（VCO）或直接数字合成器（DDS）进行实现。本设计采用ADF4351频率合成器，通过控制端输入模拟信号，动态调节输出频率以实现频率调制。

\paragraph{3. FM信号的解调与特性测量}

FM信号的解调采用锁相环（PLL）鉴频方式。载波频率$f_c$可通过频谱仪主峰位置直接测得；最大频偏$\Delta f$通过提取采样信号的瞬时相位$\phi(t)$（例如使用希尔伯特变换），求得瞬时频率$f_{\text{inst}}(t)$，并计算最大值$f_{\text{max}}$与最小值$f_{\text{min}}$，按下式确定：
\[
\Delta f = \frac{f_{\text{max}} - f_{\text{min}}}{2}
\]
调制频率$f_m$可通过分析$f_{\text{inst}}(t)$的周期性特征得到，相邻峰值（或谷值）间时间间隔为$T_m$，则：
\[
f_m = \frac{1}{T_m}
\]
调频系数$m_f$根据
\[
m_f = \frac{\Delta f}{f_m}
\]
计算得出。

\textbf{关于解调灵敏度与频偏匹配的补充说明：}

在FM调制中，频偏$\Delta f$决定了调制信号对载波频率变化的幅度，而调制频率$f_m$决定频率波动的速率。若频偏过小，频率变化幅度不足，解调器难以区分信号变化，导致灵敏度不足；反之，若频偏过大，可能超出系统线性范围，导致失真。因此，合理匹配$\Delta f$与接收系统带宽至关重要，以保证良好的解调性能。

\textbf{经验上，良好解调的条件为：}
\[
\Delta f \geq 4f_m \sim 5f_m
\]
即：最大频偏应至少为调制频率的4至5倍。

\textbf{举例说明：} 若题设中 $f_m = 5\text{kHz}$，则 $\Delta f$ 应大于 $20\text{kHz}$ 才能保证 ADF4351 模块等锁相环系统在实际硬件中能够清晰捕捉并恢复原始调制信号。

\textbf{实际工程含义：}
\begin{itemize}
  \item 增大 $\Delta f$ 可提高调制信号的“可识别度”，增强抗噪性能；
  \item 但过大的 $\Delta f$ 会带来频谱展宽（带宽增加），需权衡调制深度与系统频谱利用效率；
  \item 在实验设计中，应优先保证 $\Delta f / f_m > 4$，确保调制效果可被解调器检测。
\end{itemize}

\subsubsection{四、CW（连续波）}

CW即为无调制的纯载波信号，其表达式为：
\[
s(t) = A_c \cdot \cos(2\pi f_c t)
\]

\paragraph{特点：}
\begin{itemize}
  \item 频谱上只有单一频率成分
  \item 无需调制与解调
  \item 常用于设备标定、载波参考等
\end{itemize}


\textcolor{red}{杨启超：PSK、ASK、FSK}

\subsubsection{2ASK（二进制幅度键控）}

\paragraph{调制原理}

2ASK（Binary Amplitude Shift Keying）是通过二进制基带信号控制载波幅度的数字调制方式，其核心是用载波存在和不存在（或两种不同幅度）表示二进制信号1和0。
\begin{itemize}
\item 基带信号定义

设二进制基带信号为 \( s(t) \)，由二进制序列 \( \{a_n\} \) 生成，每个符号周期为 \( T_s \)，则：
\begin{equation}
s(t) = \sum_{n=-\infty}^{\infty} a_n g(t - nT_s)\label{2ASKst}
\end{equation}
其中：
- \( a_n \in \{0, A\} \)，\( A \) 为幅度值。当幅度为\( A \)时表示二进制信号1，当幅度为0时表示二进制信号0。\\
- \( g(t) \) 为矩形脉冲成形函数：
\begin{equation}
  g(t) = 
  \begin{cases} 
  1, & 0 \leq t < T_s \\
  0, & \text{其他}
  \end{cases}
\end{equation}

\item 载波信号

载波为高频正弦波：
\begin{equation}
c(t) = \cos(2\pi f_c t + \phi_0)
\end{equation}
其中 \( f_c \) 为载波频率，\( \phi_0 \) 为初始相位（通常设为0）。

\item 调制过程

2ASK调制通过基带信号与载波相乘实现，调制后的信号\(s_{\mathrm{2ASK}}\)数学上可表示为：
\begin{equation}
s_{\mathrm{2ASK}}(t) = s(t) \cdot c(t) = \left[\sum_{n=-\infty}^{\infty} a_n g(t - nT_s)\right] \cos(2\pi f_c t)
\end{equation}\\
- 当 \( a_n = A \)时：\( s_{\mathrm{2ASK}}(t) = A \cos(2\pi f_c t) \)\\
- 当 \( a_n = 0 \)时：\( s_{\mathrm{2ASK}}(t) = 0 \)
\end{itemize}

通过上述数学表达式可知，2ASK本质是用载波的通（幅度为A）和断（幅度为0）来传输二进制数据，是最基础的数字幅度调制方式，其实现简单但抗噪声性能较弱（噪声直接影响幅度判决）。
\paragraph{解调方法}
采用包络检波法即可，本题中使用ADL5511模块来实现2ASK的包络检波。
\paragraph{参数测量方法}
\begin{itemize}
	\item 码速率 $R_c$：由于基带信号采用矩形脉冲，其时域表达式为式\ref{2ASKst}。
	其中，$g(t)$ 为持续时间 $T_{b}$ 的矩形脉冲，码速率 $R_{c} = \frac{1}{T_{b}}$。
	矩形脉冲的傅里叶变换为：
	\begin{equation}
	G(f)=T_{b} \cdot \mathrm{sinc}(fT_{b})
	\end{equation}
	则其频谱主瓣宽度（第一零点间的频率间隔）为：
	\begin{equation}
	B_{\text{基带}} = \frac{1}{T_{b}} = R_{c}
\end{equation}
	即基带信号的主瓣宽度等于码速率。
	又因为2ASK通过基带信号与载波相乘实现调制，根据傅里叶变换的频移性质，基带频谱 \(G(f)\)被搬移到载波频率\(f_c\)两侧，形成上下边带。每个边带的主瓣宽度仍为\(R_{c}\)，因此已调信号的总主瓣宽度为\(2R_{c}\)。在实际测量中，仅测量单边带的主瓣宽度再乘以二即可得到总码速率。
		
\end{itemize}

\subsubsection{2FSK（二进制频移键控）}

\paragraph{调制原理}  
2FSK（Binary Frequency Shift Keying）是通过二进制基带信号控制载波频率的数字调制方式，其核心是用两种不同频率的载波表示二进制数据1和0。
\begin{itemize}  
\item 基带信号定义  

基带信号\(s(t)\)同式\ref{2ASKst}，但幅值有变化：\( a_n \in \{0, 1\} \)，\( a_n=1 \) 时对应二进制信号1，\( a_n=0 \) 时对应二进制信号0。

\item 载波信号  

2FSK使用两个不同频率的高频正弦波：  
\begin{equation}
c_1(t) = \cos(2\pi f_1 t), \quad c_0(t) = \cos(2\pi f_0 t)  
\end{equation}
其中 \( f_1 \) 和 \( f_0 \) 分别为二进制信号1和0对应的载波频率。在信号发生器中也显示为载波频率和跳变频率。 \( |f_1 - f_0| = {\Delta f} \)（\(\Delta f\) 为最大频偏）。

\item 调制过程  

2FSK调制通过基带信号选择不同频率的载波实现，调制后的信号\(s_{\mathrm{2FSK}}\)数学上可表示为：  
\begin{equation}
s_{\mathrm{2FSK}}(t) = \sum_{n=-\infty}^{\infty} \left[ a_n \cos(2\pi f_1 t) + (1 - a_n) \cos(2\pi f_0 t) \right] g(t - nT_s)  
\end{equation}  \\
- 当 \( a_n = 1 \)时：\( s_{\mathrm{2FSK}}(t) = \cos(2\pi f_1 t) \)  \\
- 当 \( a_n = 0 \)时：\( s_{\mathrm{2FSK}}(t) = \cos(2\pi f_0 t) \)  
\end{itemize}  
2FSK本质是用载波的两个不同频率来传输二进制数据，抗噪声性能优于2ASK，但频谱利用率较低。  

\paragraph{解调方法}  
通过锁相环鉴频来进行2FSK的解调，在本题中可使用ADF4351模块或NE564模块进行解调。

\paragraph{参数测量方法}  
\begin{itemize}  
	\item 码速率 \( R_c \)：和ASK一样，2FSK也通过基带信号与载波相乘实现调制，因此仅测量单边带的主瓣宽度再乘以二即可得到总码速率。
	\item 移频键控系数 \( h \): 调制指数定义为：  
	\begin{equation}
	h = m_f = \frac{\Delta f}{R_c}
	\end{equation}
	通过频偏（\( |f_1 - f_0| = {\Delta f} \)）与码速率（\( R_c \)）来计算即可。
\end{itemize}  


\subsubsection{2PSK（二进制相移键控）}  

\paragraph{调制原理}  
2PSK（Binary Phase Shift Keying）是通过二进制基带信号控制载波相位的数字调制方式，其核心是用载波的0相位和\(\pi\)相位表示二进制数据1和0（或反之）。
\begin{itemize}  
\item 基带信号定义  

基带信号\(s(t)\)同2ASK中的式\ref{2ASKst}，但幅值有变化：\( a_n \in \{+A, -A\} \)，\( +A \) 对应二进制信号1（0相位），\( -A \) 对应二进制信号0（\(\pi\)相位）。

\item 载波信号  

载波为高频正弦波（初始相位为0）：  
\begin{equation}
c(t) = \cos(2\pi f_c t)  
\end{equation}

\item 调制过程  

2PSK调制通过基带信号与载波相乘实现，调制后的信号\(s_{\mathrm{2PSK}}\)数学上可表示为：  
\begin{equation}
s_{\mathrm{2PSK}}(t) = s(t) \cdot c(t) = \left[\sum_{n=-\infty}^{\infty} a_n g(t - nT_s)\right] \cos(2\pi f_c t)  
\end{equation} \\
- 当 \( a_n = +A \)时：\( s_{\mathrm{2PSK}}(t) = A \cos(2\pi f_c t) \)（0相位）  \\
- 当 \( a_n = -A \)时：\( s_{\mathrm{2PSK}}(t) = -A \cos(2\pi f_c t) = A \cos(2\pi f_c t + \pi) \)（\(\pi\)相位）  
\end{itemize}  
2PSK本质是用载波的同相和反相传输二进制数据，抗噪声性能优于2ASK。

\paragraph{解调方法}  
采用相干解调法：使用平方环解调，对接收的 2PSK 信号进行自平方操作，生成二倍频载波分量，借助锁相环跟踪该二倍频分量，经二分频获取与接收载波同频的本地载波，再使本地载波与接收信号相乘，经低通滤波后可恢复基带信号，  

\paragraph{参数测量方法}  
\begin{itemize}  
	\item 码速率 \( R_c \)：与2ASK类似，2PSK也通过基带信号与载波相乘实现调制，因此仅测量单边带的主瓣宽度再乘以二即可得到总码速率。
\end{itemize}  


\subsection{硬件设计}
系统框图如图\ref{2023D_hardware_flowchart.png}所示，信号发生器(框1)可提供题目所需的调制信号，并可设置调制参数。电路包含测量和解调两部分，测量部分旨在用单片机采集信号，从而判断信号类型并计算相关参数。判断完成后单片机控制打开对应解调电路的输出开关(框14,19)，输出解调信号。


对于测量部分，由于单片机无法测量过高频率的信号，所以用DDS模块输出1.9MHz的信号(框2)，将其与输入信号相乘混频(框3)，即可得到3.9MHz和100kHz的信号，再经过100kHz低通滤波器(框4)，即可将调制信号降频至100kHz供单片机采集(框5)。

对于解调部分，当调制信号为AM/ASK时，进入ADL5511解调(框11)，当调制信号为FM/FSK时，进入ADF4351锁相环解调(框13)，ADL5511可采用直流至6GHz信号工作，但在实践中发现在更高的频率下ADL5511解调出的波形更稳定，数据手册表明ADF4351可在从35MHz到4400MHz的频率下工作，但是实践中发现上变频到10.7Mhz足以使其正常工作。综合ADL5511和ADF4351的情况，所以将调制信号上变频到10.7MHz。当调制信号为PSK时则进入平方环解调，平方环电路在\ref{sec:square_loop}节中具体阐述。

三路电路最后通过开关模块合路(框14)，模拟信号通过VCA821将幅值放大到1V以上(框16)，数字信号通过比较器整形(框18)，二者进入开关模块合路(框19)，开关模块均由单片机控制，根据判断出的类型打开对应的电路输出。

\begin{figure}[!htbp]
	\centering
	\includegraphics[scale=0.6]{./visio/2023D_hardware_flowchart.pdf}
	\caption{2023D题硬件流程图}
	\label{2023D_hardware_flowchart.png}
\end{figure}

\textcolor{blue}{花孔令其，绘制NE564框图，李丙彦，阐述NE564电路中的细节}

\subsection{NE564锁相环电路细节}
NE564在本题中有两个应用，一开始我们仅考虑将它用于平方环电路中的锁相部分作为锁相环来使用，但是实验室中有市售的NE564解调模块，使用起来非常方便，虽然购买的模块有两个输出口，分别标着FM输出和FSK输出，但是实际使用调试后我们发现其实仅从FM输出口接输出即可，经过电压比较器后即使输入是FSK信号，也能得到很好的波形，这又进一步简化了最终解调电路。相比于程控的ADF4351，虽然4351也能较好的解决本题的FM和FSK解调问题，但是最终我们还是选择了更方便的NE564。
而在平方环所需要的锁相环电路，NE564的电路结构也非常简单，仅有一个影响参数的电容，通过改变它们能达到改变锁相中心频率的效果，经过实际测试，电容在1到2pf左右电容可以较稳定的锁定700k的信号，不会影响后续的解调。但是实际焊接完成后的电路可能参数不同，由于我们没有购买可调电容元件，所以只能在已有的电容中尽量选择接近的，同学们可以购买可调电容元件，更加方便调试和选择合适的电容值。接下来先介绍NE564作为普通锁相环的电路细节，原理图见图\ref{NE564电路图.png}。
\begin{figure}[!htbp]
	\centering
	\includegraphics[scale=0.5]{./fig/564hardware.jpg}
	\caption{NE564锁相环应用原理图}
	\label{NE564电路图.png}
\end{figure}


\begin{itemize}
    \item \textbf{电源去耦设计}：电源引脚配置 \( C_9 \)（100μF）和 \( C_5 \)（10nF）。
    - \textbf{为什么要去耦？} 电源内阻与寄生电感会引入低频纹波（如50Hz市电）和高频噪声（如开关谐波）。NE564内部VCO、鉴相器对电源波动敏感，噪声会导致解调失真、频率漂移或芯片异常。
    - \textbf{大小电容搭配原理}：
      \begin{itemize}
        \item \( C_9 \)（100μF电解电容）：容量大、ESR高，滤除低频纹波，稳定电源电压。它能存储能量，应对电源的瞬间波动，为芯片提供稳定的电压基础。
        \item \( C_5 \)（10nF瓷片电容）：容量小、ESR低，抑制高频噪声，利用“高频信号走电容”特性旁路干扰。其响应速度快，能及时处理高频的干扰信号。
      \end{itemize}
    - \textbf{效果}：二者配合形成“低频 + 高频”双重滤波，确保为NE564提供稳定电源，避免电源纹波干扰内部VCO、鉴相器等核心电路。

    \item \textbf{输入信号处理}：FM/RF\_INPUT输入引脚通过 \( C_6 \)（470nF）耦合输入信号，需保证信号幅度与NE564匹配。
    - \textbf{为什么用耦合电容？} \( C_6 \) 隔离直流成分，仅传输交流信号，避免芯片输入引脚因直流偏置损坏，同时防止前级与NE564直流工作点相互干扰。
    - \textbf{信号幅度匹配关键}：NE564输入信号幅度需在20mV~200mVpp范围内。过强信号会导致内部放大器饱和，过弱则无法触发鉴相器。前端可考虑增加简单滤波或限幅电路（图中未完全体现），防止大信号冲击芯片并滤除带外干扰。前端若有大信号，需增加限幅电路（如二极管钳位）保护芯片；若存在带外干扰（如其他频率信号），需加带通滤波器（如LC滤波）滤除杂波，确保只有目标FM信号进入芯片。

    \item \textbf{环路滤波器设计}：4、5脚外接 \( C_4 \)（10nF）构成环路滤波器。
    - \textbf{环路滤波器的作用}：作为锁相环（PLL）的低通滤波器，滤除鉴相器输出的高频误差信号，保留直流/低频控制电压，驱动VCO跟踪输入信号频率，实现锁定。
    - \textbf{电容值的影响}：
      \begin{itemize}
        \item 小电容（如10nF）：截止频率高，环路响应快但抗噪弱，适合高频偏信号。这种情况下，环路能够快速响应输入信号的变化，但容易受到高频噪声的干扰。
        \item 大电容：截止频率低，抗噪强但响应慢，适合强噪声环境。此时，虽然环路对噪声有较好的抑制能力，但在跟踪快速变化的信号时可能会有延迟。
      \end{itemize}
    - \textbf{配置逻辑}：电容值影响环路带宽与响应速度，当前 \( 10nF \) 的选择需结合输入信号频偏范围与噪声水平调试优化，以达最佳锁定效果。需根据输入信号的频偏范围和噪声环境折中选择，通过调试找到最适合的电容值，确保环路既能够快速跟踪信号又能有效抵抗噪声。

    \item \textbf{环路增益控制}：2脚（ \( LOOP\_GAIN\_CONTROL \)）通过调节流入电流 \( I_2 \) 控制环路增益。
    - \textbf{环路增益是什么？} 环路增益 \( K = K_d \times K_v \times K_f \)，决定PLL对频偏的跟踪能力。2脚通过调节 \( I_2 \) 改变鉴相器增益 \( K_d \) 和VCO增益 \( K_v \)。
    - \textbf{为什么要控制增益？}
      \begin{itemize}
        \item 增益过高：环路易自激振荡，导致VCO频率波动失锁。这会使输出信号不稳定，无法准确跟踪输入信号。
        \item 增益过低：锁定范围小，信号偏移易失锁。意味着电路对输入信号的变化适应能力变差。
      \end{itemize}
    - \textbf{电阻计算原理}：利用公式 \( R = \frac{V_{CC} - 1.3\,\text{V}}{I_2} \) 估算外围电阻值。调试时精细调整，避免增益过高自激或过低导致锁定范围不足，确保对输入信号频偏有效跟踪。例如，当 \( V_{CC}=5V \)，\( I_2 = 1mA \) 时，\( R = 3.7kΩ \)。

    \item \textbf{VCO频率设定}：12、13脚（ \( FREQ\_SET\_CAP \)）外接定时电容决定VCO固有振荡频率。
    - \textbf{VCO工作原理}：VCO频率由外接电容 \( C_t \) 和内部电流源决定，公式为 \( f_v \approx \frac{1}{20 \times C_t} \)（\( C_t \) 单位为pF，\( f_v \) 单位为MHz）。
    - \textbf{为什么用高精度电容（如NP0/C0G）？} 普通电容（如X7R）温度漂移大（±15％），NP0/C0G电容温度系数仅±30ppm/℃，可避免温度变化导致VCO频率偏离输入载波频率，造成解调误差。依据公式或芯片手册曲线图选电容值，采用高精度电容（如NP0/C0G材质），防止温度漂移致频率偏差，保证解调准确性。

    \item \textbf{输出匹配设计}：9脚（\( VCO\_OUT\_TTL \)）输出TTL电平信号。
    - \textbf{为什么需要阻抗匹配？} NE564输出TTL电平（5V/0V），若后级输入阻抗不匹配，会导致信号反射、衰减或失真（如50Ω负载拉低输出电压）。
    - \textbf{如何匹配？} 需与后级电路输入阻抗匹配（如通过 \( R_5 \) 等元件），确保电平兼容，避免信号失真，保障解调信号有效传输。通过串联电阻 \( R_5 \)（如1kΩ）或并联上拉电阻调整阻抗，确保信号幅度符合后级要求，同时避免过大电流损坏芯片引脚。

    \item \textbf{接地与抗干扰}：芯片接地引脚（\( GND \)）可靠接地。
    - \textbf{单点接地的作用}：多点接地形成地环路，引入低频噪声（如50Hz工频）。单点接地减少电位差，采用单点接地减少地环路干扰，适合NE564高频工作场景（最高50MHz）。
    - \textbf{敏感引脚走线原则}：鉴相器输入、VCO控制等敏感引脚走线远离大电流路径，鉴相器输入、VCO控制引脚（如3、4脚）应远离大电流路径，缩短高频走线（寄生电感 \( L \approx 1nH/mm \)），减少噪声耦合与信号延迟。必要时对NE564部分增加屏蔽，缩短高频信号走线以降低寄生电容和电感影响，提升抗干扰能力。
    - \textbf{屏蔽措施}：加金属屏蔽罩隔离外部电磁场，适用于强电磁环境。

    \item \textbf{调试优化环节}：上电后用示波器监测关键引脚（如VCO输出、解调输出）波形。
    - \textbf{为什么需要调试？} 理论计算与实际电路存在元件误差、布局寄生效应，需实测验证。
    - \textbf{关键步骤解析}：
      \begin{itemize}
        \item 示波器监测：确保无异常振荡或杂波。观察VCO输出（9脚）和解调输出（7脚）波形，排查电源调输出（7脚）波形，排查电源、接地或滤波问题。
        \item 锁定范围测试：输入不同频率FM信号，测试NE564锁定范围，通过调整环路增益（2脚）和滤波器（4、5脚）参数优化。输入信号频率在 \( f_v \pm \Delta f \) 内扫描，调整2脚电阻或 \( C_4 \) 确保锁定。
        \item 抗噪测试：在输入信号中加入噪声，观察解调输出抗噪能力，必要时调整滤波参数，确保电路稳定可靠工作。注入白噪声，观察解调输出信噪比，优化 \( C_4 \) 或接地设计。
      \end{itemize}
\end{itemize}

在锁相环的VCO后输出，对输入信号进行跟踪、锁定和滤波。
用户可以通过调整电容C3的值来改变环路滤波器的中心频率，900pf的中心频率在350k左右，电容越大中心频率越低，反之电容越小中心频率越高，用户可自己选择中心频率
锁相环在以中心频率为中心的一个范围内能正常工作，当其正常工作时，可以输出一个与输入频率相等的方波信号，相位差90°。随着频率的增大可能会产生谐波，但能锁上。
未锁上的现象：输出信号与输入信号差距较大，且不改变，频率大致为其的环路滤波器的中心频率。

在我们实际使用的过程之中，发现这个中心频率的要求有些苛刻，因为如果前半部分的解调电路做的不是很好，导致最后达到锁相环的信号有噪声或者是谐波以及小尖峰等，会导致锁相环输出非常不稳定。也就是说，比如输入信号经过乘法器已经倍频到了700k，但是你的锁相环中心频率由于电容问题只到了500k，虽然也能锁上700k信号，但是输出会很不稳定，导致之后的电路也出现问题，结果就是最后经过滤波器后的信号高低电平非常难辨认，经过比较器后就解调不出来。所以尽量将中心频率控制在700到800k之间，虽然信号有时候也会不稳定，但是不会影响后续解调。

如果想要在此基础上，或者重新构建用于解调的NE564电路，我们根据芯片的数据手册给出以下的参数和元件调整建议
\subsubsection{NE564解调电路设计改进}

\paragraph{核心电路架构优化}
为抑制寄生调幅并提升信号完整性，需在输入前端构建限幅滤波电路：  
\begin{itemize}
    \item \textbf{双向限幅电路}：并联两只高速开关二极管（如1N4148），将输入电压钳位在$\pm$0.7V以内，避免过强信号导致NE564内部限幅器饱和，确保鉴相器输入信号的幅度稳定性。  
    \item \textbf{偏置滤波网络}：采用RC低通滤波器（$R_1$=1kΩ，$C_2$=0.1μF），截止频率设计为1.6MHz（$f_c = \frac{1}{2\pi RC}$），滤除带外高频噪声，降低鉴相器输入信号的杂波干扰。  
\end{itemize}

在2脚环路增益控制端构建可调电阻网络，实现锁定范围的精细化调整：  
\begin{itemize}
    \item \textbf{电阻配置}：串联固定电阻$R_3$（1kΩ）与电位器$RP$（10kΩ），总电阻满足 $R = \frac{V_{\text{CC}} - 1.3\,\text{V}}{I_2}$，其中偏置电流 $I_2$ 推荐取值200--500μA，对应总电阻范围8--23.5kΩ。  
    \item \textbf{工程实现}：通过调节$RP$改变流入2脚的电流，从而调整鉴相器增益与VCO控制灵敏度，使锁定范围覆盖目标频偏（如$\pm$1MHz），并避免因增益过高引发的环路自激振荡。  
\end{itemize}

采用固定电容与可调电容并联策略，实现10.7MHz中心频率的高精度设定：  
\begin{itemize}
    \item \textbf{电容组合}：根据公式 $f_v \approx \frac{1}{20 \times C_t}$，计算可得 $C_t=\frac{1}{20\times f_v}=\frac{1}{20\times10.7}\approx4.67$pF。选用 5pF NP0 固定电容（温度系数$\pm$30ppm/℃）与 1/5pF 瓷介微调电容并联，通过微调电容补偿制造公差与温度漂移。  
    \item \textbf{校准方法}：利用信号发生器输入10.7MHz载波，监测解调输出电压，调节微调电容使输出幅值最大化（$\geq$0.4V），并通过频率 - 电容对照表（参考官方图5）验证一致性。  
\end{itemize}

构建多级滤波接地系统，抑制电源噪声与地环路干扰：  
\begin{itemize}
    \item \textbf{电源滤波}：  
      \begin{itemize}
        \item 输入端采用100μF电解电容（低频滤波）与10μF陶瓷电容（高频滤波）并联，降低电源纹波；  
        \item 芯片电源脚（1脚）就近配置100nF去耦电容（布局距离$<$5mm），抑制高频噪声耦合。  
      \end{itemize}
    \item \textbf{接地策略}：  
      \begin{itemize}
        \item 采用星型接地结构，芯片GND（8脚）直接连接主地平面，避免与功率地共线；  
        \item 敏感信号走线（如环路滤波引脚4、5脚）宽度$\geq$0.3mm，降低接地阻抗对环路稳定性的影响。  
      \end{itemize}
\end{itemize}

在16脚输出端构建π型滤波网络，提升解调信号质量：  
\begin{itemize}
    \item \textbf{滤波参数}：采用$R_5$（1kΩ）串联$C_7$、$C_8$（各10nF），构成截止频率15.9kHz的低通滤波器（$f_c = \frac{1}{2\pi R \sqrt{C_7 C_8}}$），有效滤除VCO杂散频率（如谐波分量），输出纯净的调制信号。  
\end{itemize}


\begin{table}[htbp]
    \centering
    \caption{NE564重点电路元件细节}
    \label{tab:components}
    \begin{tabularx}{\textwidth}{|p{2.5cm}|p{2cm}|X|X|}
	    \hline
	    元件类型 &标号 &参数规格 &功能说明\\
	    \hline
	    耦合电容       &$C_1$  &0.47μF/50V X7R          &输入信号交流耦合\\
	    \hline
	    限幅二极管     &$D_1/D_2$ &1N4148                  &双向幅度钳位\\
	    \hline
	    偏置电阻       &$R_1$  & 0kΩ $\pm$1\% 金属膜电阻 &限幅放大器偏置电路\\
	    \hline
	    环路增益调节   &$R_3/RP$ &1kΩ + 10kΩ 电位器       &动态调整环路增益\\
	    \hline
	    定时电容       &$C_t$  &5pF NP0 + 1/5pF 微调    &VCO频率设定（10.7MHz）\\
	    \hline
	    电源滤波电容   &$C_5/C_6$ &10μF/16V 电解 + 100nF NP0 &电源去耦\\
	    \hline
	    输出滤波器     &$R_5/C_7/C_8$ &1kΩ + 10nF×2 NP0 &解调信号谐波滤除\\
	    \hline
    \end{tabularx}
\end{table}

\paragraph{标准化电路设计方案（如10.7MHz应用）}
\begin{itemize}
    \item \textbf{信号流向}：遵循“输入预处理→NE564核心处理→输出滤波”的线性布局，避免高频信号回流路径交叉。  
    \item \textbf{关键元件间距}：定时电容$C_t$与芯片12、13脚间距$<$2mm，电位器$RP$与2脚走线长度$<$3mm，减少寄生参数影响。  
    \item \textbf{屏蔽设计}：在VCO输出引脚（9脚、11脚）周围敷设接地铜箔，形成局部屏蔽区域；条件允许时加装金属屏蔽罩，降低电磁辐射干扰。  
\end{itemize}


\subsection{平方环电路}
\label{sec:square_loop}
平方环电路在解调2PSK中主要用于载波同步，即从已调信号中提取出与发送端同频同相的载波，为相干解调提供必要条件，其结构框图如图\ref{平方环}所示。
\begin{figure}
	\centering
	\includegraphics[scale=0.7]{./pdf/square_loop.pdf}
	\caption{平方环}
	\label{平方环}
\end{figure}
设载波信号$c(t)$的表达式为：
\begin{equation}
	c(t) = A_ccos(\omega_ct + \phi)
\end{equation}
其中$A_c$是信号幅度，$\omega_c$是载波角频率，$\phi(t)$是初始相位。
输入的二进制比特流为d(t)，当$d(t) = 0$时，BPSK信号的相位为0；当$d(t) = 1$时，BPSK信号的相位为$\pi$。
则BPSK调制信号可以表示为:
\begin{equation}
	S(t) = A_ccos(\omega_ct + \phi + \pi d(t))
\end{equation}
平方环电路中的平方器将输入的BPSK信号进行平方运算，
得到
\begin{equation}
	[S(t)]^2 = A_c^2cos^2(\omega_c t + \phi + \pi d(t)) = \frac{A_c^2}{2} + \frac{A_c^2}{2}cos(2\omega_ct + 2\phi + 2\pi d(t))
\end{equation}
这一步将信号的频率加倍，产生了2$\omega_c$的频率成分，为后续提取载波频率$\omega_c$奠定基础。
平方后的信号通过一个中心频率为2$\omega_c$的窄带滤波器，滤除直流分量$\frac{A^2_c}{2}$和其他高频噪声，得到
\begin{equation}
	S_1(t) = \frac{A^2_c}{2}cos(2\omega_ct + 2\phi + 2\pi d(t))
\end{equation}
再通过分频器将频率降为$\omega_c$，得到与发送端载波同频的信号
\begin{equation}
	S_2(t) = \frac{A^2_c}{2}cos(\omega_ct + \phi + \pi d(t))
\end{equation}
理论上实现了载波同步，但实际中由于相位$\phi(t)$的存在以及可能出现频率抖动，还需要锁相环来进一步跟踪和调整相位，
以确保提取的载波与发送端载波同频同相。
再通过移相器对信号进行适当的相位调整，以满足锁相环的相位跟踪要求或使提取的载波与接收信号的载波在相位上达到最佳同步状态。
当锁相环在跟踪过程中出现相位偏差时，移相器可以根据锁相环的控制信号对信号进行相位微调，从而实现更精确的载波同步。

得到同步载波后，将接收到的BPSK信号$S_2(t)$与本地载波c(t)相乘，得到：
\begin{equation}
	\begin{split}
		S_2(t)c(t) &= cos(\omega_ct + \phi + \pi d(t))\cdot cos(\omega_ct + \phi)\\
		&= \dfrac{A^2_c}{2}[cos(2(\omega_c t + \phi + \pi d(t))) + cos(\pi d(t))]
	\end{split}
\end{equation}
再经过一个低通滤波器，将高频分量$\dfrac{A^2_c}{2}cos(2(\omega_c t + \phi + \pi d(t)))$滤除，
只保留低频分量$\dfrac{A^2_c}{2}cos(\pi d(t))$。
因为d(t)取值为0或1，当$d(t)=0$时，$\dfrac{A^2_c}{2}cos(\pi d(t)) = \dfrac{A^2_c}{2}$；
当$d(t)=1$时，$\dfrac{A^2_c}{2}cos(\pi d(t)) = -\dfrac{A^2_c}{2}$。
这样就可以通过判决器对滤波后的信号进行判决，当信号大于0时，判为$d(t) = 0$；当信号小于0时，判为$d(t) = 1$，
从而恢复出原始的二进制信号。

\begin{figure}
	\centering
	\includegraphics[scale=0.6]{./pdf/2023D_square_loop.pdf}
	\caption{2PSK解调流程图}
	\label{2PSK解调流程图}
\end{figure}
如图\ref{2PSK解调流程图}为解调PSK信号的流程图。
首先BPSK信号经过AD835乘法器进行自平方，此时信号频率由原来的100K变为200K，且包含一定的直流分量和高频噪声。
再经过中心频率为200K的带通滤波器滤除直流和其他噪声，将频率降至200K，在其后接入74LS74N分频模块将频率降至100K。
此时得到的信号频率与原载波信号频率相同。再接一个基于MCP41010的移相器模块补偿由于前向系统造成的相位偏差。
此时得到的信号即为与原载波信号同频同相的本地载波。在实际操作时，根据电路模块的需要适当加一些运放模块，以保证各电路正常工作。
例如滤波器在设计过程时会有理论衰减以及实际中的电子元器件有误差会导致滤波器有衰减。
又比如分频器模块使用的数字芯片需要一个较大的触发电压，需要在前面加一个运算放大器。
得到同频同相的本地载波后，在AD835中与BPSK信号相乘，即得到原信号。所得到的信号波形可能不太完美，需在后面加低通滤波器和过零比较器。
需指出，使用平方环电路解调BPSK信号时，可能会出现相位模糊问题，即倒$\pi$现象。


\subsection{软件设计}

\subsubsection{软件结构}

\begin{figure}
	\centering
	\includegraphics[scale=0.5]{./pdf/2023D_software_flowchart.pdf}
	\caption{2023D题软件流程图}
	\label{2023D_software_flowchart}
\end{figure}

本题的程序结构大致如图\ref{2023D_software_flowchart}所示，鉴于硬件的差异，程序结构会有些许差异，但大致思路无异，现在对各个环节进行详细说明：

\textbf{TIM触发ADC固定频率采样}：
程序的第一个关键部分是特定频率的ADC采样，采样率决定了对信号进行采样的频率间隔。根据奈奎斯特采样定理，为了准确地还原信号以及避免频谱混叠，
采样率必须至少是信号最高频率的两倍，结合下变频的频率，即可得到ADC的采样频率$f_s>=200KHz$。
频谱分辨率可以用公式$\Delta f=f_s/N$计算，其中$\Delta f$是频谱分辨率，$f_s$是采样率，$N$是FFT点数。
本题信号最低频率为$1KHz$,那么频谱分辨率必须小于等于1KHz，综合考虑MCU性能、频谱分辨率要求、分辨所需时间以及CMSIS-DSP库所提供的API，
笔者此处选择409.6KHz的采样率，同时使用4096点RFFT，可实现100Hz的频谱分辨率。
\begin{lstlisting}[language=C]
/* TIM3触发ADC2采样409.6KHz  */
HAL_TIM_Base_Start(&htim3);
HAL_ADC_Start_DMA(&hadc2, (uint32_t *)adc_buffer, 4096);
\end{lstlisting}

\textbf{DMA传输采样数据}：
使用DMA自动将ADC数据传输到RAM中，可以避免因使用阻塞模式导致ADC采样频率不准确。DMA的模式选择“Normal”，配合ADC转换完成回调函数
（\textbf{注意：}使用此回调函数需开启所用DMA通道流的中断。）即可实现固定块大小采样数据的处理。
\begin{lstlisting}[language=C]  
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
\end{lstlisting}

\textbf{数据预处理}：
ADC采集的数据在执行FFT之前可以先去除直流再经过窗函数，
去除直流可以避免频谱分析结果在0Hz出出现极大值，影响后续寻峰判断；
使用合理的窗函数可以避免有限ADC采集数所造成的频谱泄露。
当对有限长的信号进行FFT分析时，相当于对信号进行周期延拓。如果信号在截断处不连续，会导致频谱出现泄漏现象，
即原本集中在某一频率的能量扩散到其他频率上，从而影响频谱分析的准确性。
加窗函数可以使信号在截断处逐渐过渡到零，减少信号的不连续性，从而降低频谱泄漏。
同时使用合理的窗函数可以抑制栅栏效应，在一定程度上改善频谱的分辨率，使频谱看起来更加平滑，有助于更准确地识别信号中的频率成分。
综合旁瓣抑制效果和频率分辨率，笔者此处选择汉明窗。
\begin{lstlisting}[language=C]
float32_t FFTin[RFFT_SIZE], hamming_window[RFFT_SIZE];
arm_hamming_f32(hamming_window, RFFT_SIZE);
/* 计算直流偏置 */
for(uint16_t i=0; i<RFFT_SIZE; i++)
{
	DC *= i;
	DC += adc_buffer[i];
	DC /= (i+1);
}
/* 处理ADC数据，加窗 */
for(uint16_t i=0;i<RFFT_SIZE;i++)
{
	FFTin[i] = (float32_t)hamming_window[i]*(adc_buffer[i] - DC);
}
\end{lstlisting}

\textbf{时域分析}：采集的信号在时域上可以做的较为简单的分析便是零点分析，
比如幅度调制2ASK部分时间振幅为零，故其零点较多，可以综合采样频率和采样时间大致估算零点阈值，从而为信号类型识别提供参考。
\begin{lstlisting}[language=C]  
/* 计算零点 */
for(uint16_t i=0; i<RFFT_SIZE; i++)
{
	/* 考虑ADC采样浮动与离散采样的零点容差范围 */
	if(fabs(adc_buffer[i]-DC)<1000)
		t_zeros_num++;
}
\end{lstlisting}

\textbf{快速傅里叶变换}：
此处为时域变换带频域，故需使用正变换RFFT，库函数调用方法如下所示，
库函数通过内联汇编的方式实现单指令多数据（SIMD），在-o3优化下，RFFT几乎瞬间完成，调用库函数可以充分发挥单片机的性能，提升信号识别速度，
鉴于此，由于信号在下变频中会存在噪声且ADC存在浮动误差，傅里叶变换后的结果具有误差，为增强参数计算准确性和增强系统鲁棒性，可以使用多次次FFT结果的均值作为分析频谱的数据来源，
时间成本几乎全部来源与等待ADC采样完成，即便使用10次FFT结果的均值，耗时也仅仅只有1秒。
其次，需要注意的是，使用此函数时需要考虑栈空间的大小，H743在cubxMX配置时默认的栈空间大小仅仅只有1KB（1024Bit），但是一个4096长度的单精度浮点类型（float32）数组就要占用16KB，
所以建议在编写代码时，避免声明和使用较大数据长度的局部变量，推荐使用全局变量静态分配RAM空间，避免过多的函数嵌套调用，同时增大栈空间的大小。
\begin{lstlisting}[language=C]  
/* 实数傅里叶变换 */
arm_rfft_fast_instance_f32 S;
arm_rfft_fast_init_f32(&S, RFFT_SIZE);
arm_rfft_fast_f32(&S, FFTin, FFTout, 0);
/* 计算幅值 */
arm_cmplx_mag_f32(FFTout, FFTout_abs, RFFT_SIZE/2);
\end{lstlisting}

最后，结合时域分析和FFT结果即可识别调制方式和计算相应参数。

\subsubsection{寻峰算法}
对于调制信号的寻峰算法，我们首先通过设定一个固定阈值（不能过大或过小,可通过多次测试来选取一个比较合适的值），将超过阈值的点标
记为候选峰值。然后，定义一个滑动窗口（滑动窗口的大小不宜过大），遍历候选峰值。若某点为窗口内的最大值且高于相邻点，则将这个点标记为峰值。
\begin{lstlisting}[basicstyle=\small]
if((arr[0]>arr[1])&&(arr[0] > 30.0f))
{
	……
}

for(int i = 1; i < n - 1; i++)
{
	if((arr[i] > arr[i-1])&&(arr[i]>arr[i+1])&&(arr[i]>30.0f))
	……
}

if((arr[n-1]>30.0f)&&(arr[n-1]>arr[n-2]))
{
	……
}
\end{lstlisting}

如上，就是一个简单的寻峰算法。$arr\left[\enspace\right]$是进行寻峰的数组，设置的固定阈值为$30.0f$，滑动窗口的大小为3。在算法的“……”中，可以记录峰的数量、峰值和每一个峰值对应的频率。

\textbf{附}：因为每一种信号的峰峰值不同，所以可以将固定阈值设置为动态阈值进行动态调整，以确保不会由于阈值设定的过大而漏峰。而笔者则是通过OPA690将每一种信号的的峰峰值调到一个较高的水平，以确保不会漏峰。
\subsubsection{信号参数计算}
\begin{itemize}
	\item AM:对于AM调幅信号，需要计算正弦调制信号频率$F$和调幅系数$m_a$。
	\begin{figure}[!htbp]
		\centering
		\label{pdf:AM}
		\includegraphics[scale=0.8]{./pdf/AM.pdf}
		\caption{AM的频域幅度图}
	\end{figure}
	\begin{enumerate}[(1)]
		\item 正弦调制信号频率$F$:从频域来看，AM信号的正弦调制信号频率$F$等于边带与载波的频率差，见公式(\ref{equ:AM_F})
		\begin{eqnarray}
			\label{equ:AM_F}
			F=\left|f_{\mbox{上边带}}-f_c\right|=\left|f_{\mbox{下边带}}-f_c\right|
		\end{eqnarray}
		\item 调幅系数$m_a$:边带幅度为$\dfrac{A_c m_a}{2}$，$A_c$为载波幅度，$A_s$为边带幅度。见公式(\ref{equ:AM_m_a})
		\begin{eqnarray}
			\label{equ:AM_m_a}
			m_a = \frac{2 A_s}{A_c}
		\end{eqnarray}
	\end{enumerate}
	\item FM:对于FM调制信号，需要计算正弦调制信号频率$F$、调频系数$m_f$和最大频偏$\Delta f_{max}$。
	\begin{figure}[!htbp]
		\centering
		\label{pdf:FM}
		\includegraphics[scale=0.8]{./pdf/FM.pdf}
		\caption{FM的频域幅度图}
	\end{figure}
	\begin{enumerate}[(1)]
		\item 正弦调制信号频率$F$:在频域中观测FM信号，边频间隔就是正弦调制信号频率$F$。
		\item 调频系数$m_f$:可以通过两种方式求得，分别是：
		\begin{itemize}
			\item 通过估计FM信号的带宽$B$，结合卡森带宽公式估算$B \approx 2( \Delta f_{max} + F)$,可以得到估算调频系数的计算公式(\ref{equ:FM_m_f})
			\begin{eqnarray}
				\label{equ:FM_m_f}
				m_f=\frac{\Delta f_{max}}{F}=\frac{B}{2F}-1
			\end{eqnarray}
			\textbf{附}：由于FM的带宽较宽，且对应频率接近设置的寻峰阈值，所以使用这种方法计算调频系数时，可能会出现误差。
			\item 通过贝塞尔函数零点或边频幅度比计算，可以通过查贝塞尔函数表精确地确定调频系数$m_f$的值，如公式(\ref{equ:bezer_0})或公式(\ref{equ:bezer_fudu})
			\begin{eqnarray}
				\label{equ:bezer_0}
				J_0(m_f)=0
			\end{eqnarray}
			\begin{eqnarray}
				\label{equ:bezer_fudu}
				\frac{\mbox{第一边频幅度}}{\mbox{载波幅度}}=\frac{J_1(m_f)}{J_0(m_f)}
			\end{eqnarray}
		\end{itemize}
		\item 最大频偏$\Delta f_{max}$:在得到$F$和$m_f$之后，根据公式(\ref{equ:FM_delta_f_max})
		\begin{eqnarray}
			\label{equ:FM_delta_f_max}
			\Delta f_{max} = m_f \cdot F
		\end{eqnarray}
	\end{enumerate}
	\item 2ASK:对于2ASK调制信号，需要计算信号传输的二进制码速率$R_c$。
	\begin{figure}[!htbp]
		\centering
		\label{pdf:ASK}
		\includegraphics[scale=0.8]{./pdf/ASK.pdf}
		\caption{ASK的频域幅度图}
	\end{figure}
	二进制码速率$R_c$:通过频域可以估计2ASK信号的带宽$B$，就得到二进制码速率$R_c$的计算公式(\ref{equ:ASK_R_c})
	\begin{eqnarray}
		\label{equ:ASK_R_c}
		R_c=B/2
	\end{eqnarray}
	\item 2FSK:对于2FSK信号，需要计算信号传输的二进制码速率$R_c$和移频键控系数$h$。
	\begin{figure}[htbp]
		\centering
		\label{pdf:FSK}
		\includegraphics[scale=0.8]{./pdf/FSK.pdf}
		\caption{FSK的频域幅度图}
	\end{figure}
	\begin{enumerate}[(1)]
		\item 二进制码速率$R_c$:在频域中观测FM信号，旁瓣的频率间隔为信号传输的二进制码速率$R_c$。
		\item 移频键控系数$h$:可以从频域中得到2FSK信号频率偏移后的2个不同的频率$f_1=f_c-\Delta f$、$f_2=f_c+\Delta f$($\Delta f$是2FSK信号的偏移频率)，可以得到移频键控系数$h$的计算公式(\ref{equ:FSK_h})
		\begin{eqnarray}
			\label{equ:FSK_h}
			h = \frac{f_2-f_1}{2 R_c}
		\end{eqnarray}
	\end{enumerate}
	\item 2PSK:对于2PSK信号，需要计算信号传输的二进制码速率$R_c$。
	\begin{figure}[!htbp]
		\centering
		\label{pdf:PSK}
		\includegraphics[scale=0.8]{./pdf/PSK.pdf}
		\caption{PSK的频域幅度图}
	\end{figure}
	二进制码速率$R_c$:从频域中可以得到2PSK信号的下边带频率$f_1$和上边带频率$f_2$，从而得到信号传输的二进制码速率$R_c$的计算公式(\ref{equ:PSK_R_c})
	\begin{eqnarray}
		\label{equ:PSK_R_c}
		R_c = \frac{\left|f_1-f_2\right|}{2}
	\end{eqnarray}
\end{itemize}

\textbf{附}：由于信号经过混频后再经过低通滤波器后，才进入单片机采集，所以较高频率部分的幅度可能因此受到部分抑制，导致AM、2ASK、2PSK这三种调制信号本应是对称的峰带出现下边带的整体幅度较高，而上边带的幅度整体较低的情况。

\subsection{功能测试}
本节描述赛题如何进行测试，（1）信号源参数设置方法，调制度、码率等（2）将测量结果列成表格，计算测量误差（3）测量NE564和ADL5511的性能，适当截图
\textcolor{red}{陈文旭、杨柠}
\subsubsection{信号源参数设置方法}
调制信号设置方式：
点击信号发生器的Modulate选项可进入调制信号设置页面。在设置页面中的调制类型选项对应可选择信号的类型，在调制类型页面中的第一页选项可进入第二页选择更多的调制类型，如AM，ASK，FM，FSK，PSK信号。回到设置页面，其频率，幅度，偏移选项则用于设置载波信号参数。在设置页面中进入第二页后，对应调制信号的参数设置，AM信号对应可设置调制深度和调制频率。对于ASK信号，在AM参数设置基础上，屏幕右侧的Waveform选项可将shape从Sine改为Square，即ASK信号。FM信号可设置调制频率和调制偏差，调制偏差与调制频率的比值为其调制指数。ASK,PSK，FSK可设置其速率，即码率除以2。FSK信号还可设置其跳频，跳频减载波频率除以码率为其调制高度。
\subsubsection{测量结果}	
\clearpage
AM信号测试数据表如表\ref{AM.signal test data table}，ASK信号测试数据表如表\ref{ASK.signal test data table} ，FM信号测试数据表如表\ref{FM_signal_test_data_table1} 和表\ref{FM_signal_test_data_table2}，FSK信号测试数据表如表\ref{FSK.signal test data table} ，PSK信号测试数据表如表\ref{PSK.signal test data table}。信号测量误差均在题目要求范围内。
AM信号解调图像如图\ref{AM.fig}，可以看出AM解调信号有些波形失真并且幅值未能达到题目要求。ASK解调信号如图\ref{ASK.fig},曲线光滑、波形无失真且幅值满足题目要求。FM解调信号如图\ref{FM.fig},曲线光滑、波形无失真且幅值满足题目要求。FSK解调信号如图\ref{FSK.fig},曲线光滑、波形无失真且幅值满足题目要求。PSK解调信号如图\ref{PSK.fig},曲线光滑、波形无失真且幅值满足题目要求。
\begin{table}[h!]
	\centering
	\begin{tabular}{|c|c|c|c|c|c|c|}
	\hline
	\textbf{信号类型} & \textbf{调制频率} & \textbf{调制深度} & \textbf{测量Ma} & \textbf{测量频率} & \textbf{Ma测量误差} & \textbf{频率测量误差} \\ \hline
	{AM} & 2kHz & 30\% & 0.29 & 2000Hz & 0.01 & 0 \\ \cline{2-7}
         & 4kHz & 30\% & 0.28 & 4000Hz & 0.02 & 0 \\ \cline{2-7}
         & 5kHz & 30\% & 0.29 & 5000Hz & 0.01 & 0 \\ \cline{2-7}
		 & 2kHz & 60\% & 0.58 & 2000Hz & 0.01 & 0 \\ \cline{2-7}
		 & 3kHz & 60\% & 0.59 & 3000Hz & 0.01 & 0 \\ \cline{2-7}
		 & 4kHz & 60\% & 0.57 & 4000Hz & 0.03 & 0 \\ \cline{2-7}
		 & 5kHz & 60\% & 0.58 & 5000Hz & 0.02 & 0 \\ \cline{2-7}
         & 2kHz & 90\% & 0.88 & 2000Hz & 0.02 & 0 \\ \cline{2-7}
         & 3kHz & 90\% & 0.89 & 3000Hz & 0.01 & 0 \\ \cline{2-7}
         & 4kHz & 90\% & 0.86 & 4000Hz & 0.04 & 0 \\ \cline{2-7}
         & 5kHz & 90\% & 0.87 & 5000Hz & 0.03 & 0 \\ \hline
	\end{tabular}
	\caption{AM信号测试数据表}
	\label{AM.signal test data table}
\end{table}
\begin{figure}[h!]
	\centering
	\includegraphics[width=0.9\textwidth]{./fig/23D_AM_demodelation.png}  
	\caption{AM解调}
	\label{AM.fig}
\end{figure}
\begin{table}[h!]
    \centering
    \setlength{\tabcolsep}{26pt} 
	\begin{tabular}{|c|c|c|c|}
    \hline
    \textbf{信号类型} & \textbf{码元速率} & \textbf{测量速率} & \textbf{速率测量误差} \\ \hline
    {ASK} & 10kbps & 10kbps & 0 \\ \cline{2-4}
          & 8kbps  & 8kbps  & 0 \\ \cline{2-4}
          & 6kbps  & 6kbps  & 0 \\ \hline
    \end{tabular}
    \caption{ASK信号测试数据表}
	\label{ASK.signal test data table}
\end{table}
\begin{figure}[h!]
	\centering
	\includegraphics[width=0.9\textwidth]{./fig/23D_ASK_demodelation.png}  
	\caption{ASK解调}
	\label{ASK.fig}
\end{figure}
\begin{table}[h!]
	\centering
	\setlength{\tabcolsep}{8pt} 
    \begin{tabular}{|c|c|c|c|c|c|c|}
	\hline
	\textbf{信号类型} & \textbf{频率} & \textbf{mf} & \textbf{频偏} & \textbf{测量频率} & \textbf{测量mf} & \textbf{测量最大频率} \\ \hline
	{FM}  & 2 kHz  & 4000  & 8 kHz  & 2000   & 3.99  & 7980    \\ \hline
	      & 3 kHz  & 4000  & 12 kHz & 3000   & 4     & 12000   \\ \hline
	      & 4 kHz  & 4000  & 16 kHz & 4000   & 4     & 16000   \\ \hline
          & 5 kHz  & 4000  & 20 kHz & 5000   & 4     & 20000  \\ \hline
	\end{tabular}
	\caption{FM信号测试数据表1}
	\label{FM_signal_test_data_table1}
\end{table}
\begin{table}[h!]
	\centering
	\setlength{\tabcolsep}{18pt} 
    \begin{tabular}{|c|c|c|c|}
	\hline
	\textbf{信号类型} & \textbf{频率测量误差} & \textbf{mf测量误差} & \textbf{频偏测量误差} \\ \hline
	{FM} & 0   & 0.01 & 20 \\ \hline
	     & 0   & 0    & 0  \\ \hline
		 & 0   & 0    & 0  \\ \hline
		 & 0   & 0    & 0  \\ \hline
	\end{tabular}
	\caption{FM信号测试数据表2}
	\label{FM_signal_test_data_table2}
\end{table}
\begin{figure}[h!]
	\centering
	\includegraphics[width=0.9\textwidth]{./fig/23D_FM_demodelation.png}  
	\caption{FM解调}
	\label{FM.fig}
	\end{figure}
\begin{table}[h!]
	\setlength{\tabcolsep}{26pt} 
	\centering
	\begin{tabular}{|c|c|c|c|}
	\hline
	\textbf{信号类型} & \textbf{码元速率} & \textbf{测量值} & \textbf{速率测量误差} \\ \hline
	{FSK} & 3kHz  & 6kbps  & 0 \\ \cline{2-4}
		  & 4kHz  & 8kbps  & 0 \\ \cline{2-4}
		  & 5kHz  & 10kbps & 0 \\ \hline
	\end{tabular}
	\caption{FSK信号测试数据表}
	\label{FSK.signal test data table}
\end{table}	
\begin{figure}[h!]
	\centering
	\includegraphics[width=0.9\textwidth]{./fig/23D_FSK_demodelation.png}  
	\caption{FSK解调}
	\label{FSK.fig}
\end{figure}

\begin{table}[h!]
	\setlength{\tabcolsep}{26pt} 
	\centering
	\begin{tabular}{|c|c|c|c|}
	\hline
	\textbf{信号类型} & \textbf{码元速率} & \textbf{测量值} & \textbf{速率测量误差} \\ \hline
    {PSK} & 3kHz  & 6kbps  & 0 \\ \cline{2-4}
		 & 4kHz  & 8kbps  & 0 \\ \cline{2-4}
		 & 5kHz  & 10kbps & 0 \\ \hline
	\end{tabular}
	\caption{PSK信号测试数据表}
	\label{PSK.signal test data table}
\end{table}
\begin{figure}[h!]
	\centering
	\includegraphics[width=0.9\textwidth]{./fig/23D_PSK_demodelation.png}  
	\caption{PSK解调}
	\label{PSK.fig}
\end{figure}
\clearpage	
\subsubsection{NE564和ADL5511性能测试}
本小节主要对NE564的锁定带宽、跟踪范围和ADL5511的解调性能及均方值输出性能进行测试。其中NE564的锁定范围是指设备能够精确跟踪信号变化的频率范围，跟踪范围是指是指设备能够连续跟踪输入信号频率变化的范围。也就是说，在这个范围内，设备可以动态地调整并实时地跟随信号的频率变化。当失锁或超出跟踪范围时，输出波形消失。测试时可以随意设定输入信号，保证输出波形正常，且不失真。慢慢增加输入信号的频率，同时观察 NE564 是否仍能保持锁定状态即波形存在且不失真。如果输出信号依然稳定，说明 NE564 仍处于锁定状态。
如果 NE564 无法再锁定输入信号，即输出信号变得不稳定或频率开始漂移或出现杂散频率，则此时的输入频率就是锁定范围的上限。同样地，可以从初始设置的频率开始，逐步减小输入参考信号的频率。
如果 NE564 失去锁定，输出信号不再稳定，则此时的输入频率就是锁定范围的下限。在 NE564 锁定状态下，逐步增大输入信号的频率，观察信号通过锁相环之后是否仍能保持稳定，当输出波形消失，此时对应的频率为跟踪范围上限。同样在 NE564 锁定状态下，逐步减小输入信号的频率，观察信号通过锁相环之后是否仍能保持稳定，当输出波形消失，此时对应的频率为跟踪范围下限。由图\ref{NE564_Upper frequency limit}和图\ref{NE564_Lower frequency limit}可知NE564的锁定频率的上限为900Khz,下限为400KHz,锁定带宽为500KHz。由图\ref{NE564trace upper limit}和图\ref{NE564trace lower limit}可知NE564的跟踪范围为560KHz-790KHz。
\begin{figure}[htbp]
	\centering
	\textbf{NE564的锁定频率的上限为900Khz,下限为400kHz,锁定带宽为500kHz。}\\
	\vspace{10pt}
	\begin{subfigure}{0.48\linewidth}
		\centering
		\includegraphics[width=1\linewidth]{./fig/NE564_Upper frequency limit.png}
		\caption{NE564频率锁定上限}
		\label{NE564_Upper frequency limit}
	\end{subfigure}
	\centering
	\hfill 
	\begin{subfigure}{0.5\linewidth}
		\centering
		\includegraphics[width=1\linewidth]{./fig/NE564_Lower frequency limit.png}
		\caption{NE564频率锁定下限}
		\label{NE564_Lower frequency limit}
	\end{subfigure}
	\caption{NE564锁定范围}
\end{figure}
\begin{figure}[htbp]
	\centering
	\textbf{NE564的跟踪范围为560kHz-790kHz.}\\
	\vspace{10pt}
	\begin{subfigure}{0.48\linewidth}
		\centering
		\includegraphics[width=1\linewidth]{./fig/NE564_trace upper limit.png}
		\caption{NE564跟踪上限}
		\label{NE564trace upper limit}
	\end{subfigure}
	\centering
	\hfill 
	\begin{subfigure}{0.5\linewidth}
		\centering
		\includegraphics[width=1\linewidth]{./fig/NE564_trace lower limit.png}
		\caption{NE564跟踪下限}
		\label{NE564trace lower limit}
	\end{subfigure}
	\label{NE564capture range}
	\caption{NE564跟踪范围}
\end{figure}
\begin{figure}[!h]
    \centering
    \textbf{以下为VENV包络输出，输入信号为500mV，10KHz的AM信号和ASK信号} \\
    \vspace{10pt}
    \begin{subfigure}{0.48\linewidth}
        \centering
        \includegraphics[width=1\linewidth]{./fig/ADL5511_AM_VENV.png}
        \caption{ADL5511AM包络输出}
        \label{fig.ADL5511_AM}
    \end{subfigure}
    \centering
	\hfill   
    \begin{subfigure}{0.5\linewidth}
        \centering
        \includegraphics[width=1\linewidth]{./fig/ADL5511_ASK_VENV.png}
        \caption{ADL5511ASK包络输出}
        \label{fig.ADL5511_ASK}
    \end{subfigure}
    \caption{ADL5511包络输出}
    \label{ADL5511_VENV}
\end{figure}
\begin{figure}[htbp]
	\centering
	\textbf{以下为VRMS输出，分别100mV、400mV和800mV的输入信号,由下图可知当输入100mV信号时，输出信号的均方值为35.6mV。当输入400mV信号时，输出信号的均方值为135mV。当输入800mV信号时，输出信号的均方值为263mV。}\\
	\vspace{10pt}
	\begin{subfigure}{0.48\linewidth}
		\centering
		\includegraphics[width=1\linewidth]{./fig/ADL5511_VRMS1.png}
		\caption{100mV-ADL5511VRMS输出}
		\label{ADL5511_VRMS1}
	\end{subfigure}
	\centering
	\hfill 
	\begin{subfigure}{0.5\linewidth}
		\centering
		\includegraphics[width=1\linewidth]{./fig/ADL5511_VRMS2.png}
		\caption{400mV-ADL5511VRMS输出}
		\label{ADL5511_VRMS2}
	\end{subfigure}
	\centering
	\hfill 
	\begin{subfigure}{0.5\linewidth}
		\centering
		\includegraphics[width=1\linewidth]{./fig/ADL5511_VRMS2.png}
		\caption{800mV-ADL5511VRMS输出}
		\label{ADL5511_VRMS3}
	\end{subfigure}
	\caption{ADL5511VRMS输出}
	\label{ADL5511_VRMS}
\end{figure}
\clearpage
\section{2021年E题：数字-模拟信号混合传输收发机}
该题是一个完整的无线收发系统，要求模拟信号与数字信号同时传输，该题也是我实验室第一次参加全国赛遇到的题目，有一队同学取得了全国二等奖。赛后，随着新同学不断加入实验室，师生协力多次重复完成这道赛题，逐步形成了一套较为完整的训练方案。
\subsection{题目和分析}
\begin{tcolorbox}[title=2021年E题,breakable]
本题要求设计并制作在同一信道进行数字-模拟信号混合传输的无线收发机。其中，数字信号由4个0-9的一组数字构成；模拟信号为语音信号，频率范围为100Hz-5kHz。采用无线传输，载波频率范围为20-30MHz，信道带宽不大于25kHz，收发设备间最短的传输距离不小于100cm。

收发机的发送端完成数字信号和模拟信号合路处理，在同一信道调制发送。收发机的接收端完成接收解调，分离出数字信号和模拟信号，数字信号用数码管显示，模拟信号用示波器观测。

\includegraphics[width=0.7\linewidth]{./fig/2021E_1.jpg}

二、要求

1. 基本要求

（1） 实现模拟信号传输。模拟信号为100Hz~5kHz的语音信号，要求接收端解调后的模拟信号波形无明显失真。在只有模拟信号传输时，接收端的数码显示处于熄灭状态。

（2） 实现数字信号传输。首先键入4个0~9的一组数字，在发送端进行存储并显示，然后按下发送键对数字信号连续循环传输。在接收端解调出数字信号，并通过4个数码管显示。要求开始发送到数码管显示的响应时间不大于2秒。当发送端按下停止键，结束数字信号传输，同时在发送端清除已传数字的显示，等待键入新的数字。

（3）实现数字-模拟信号的混合传输。任意键入一组数字，与模拟信号混合调制后进行传输。要求接收端能正确解调数字信号和模拟信号，数字显示正确，模拟信号波形无明显失真。

（4） 收发机的信道带宽不大于25kHz，载波频率范围为20~30MHz。要求收发机可在不少于3 个载波频率中选择设置，具体的载波频率自行确定。

2. 发挥部分

（1）在发送端停止数字信号传输后，接收端数码显示延迟5秒自动熄灭。

（2）在满足基本要求的前提下，收发机发送端的功耗越低越好。

（3）在满足基本要求的前提下，收发机所传输的模拟信号频率范围扩展到50Hz~10kHz。

（4）其他。

三、说明

（1）数字和模拟信号必须先经过合路电路处理，然后在同一信道上调制传输，其调制方式和调制度自行确定。在合路电路的输出端应留有观测端口，用于示波器观测合路信号的波形变化。

（2）收发机的发送端和接收端之间不得有任何连线。

（3）收发机的发送端与天线的连接采用SMA接插头，发送端为F（母）头，天线端为M（公）头。天线的长度不超过1米。

（4）收发机的发送端和接收端均采用电池单电源供电，发送端的供电电路应留有供电电压和电流的测试端口。

（5）收发机的载波频率选取应尽量避开环境电波干扰。

（6）本题目中信道带宽约定为已调信号的 -40dB 带宽，通过频谱仪进行测量。具体如下图所示。

\includegraphics[width=0.7\linewidth]{./fig/2021E_2.jpg}
\end{tcolorbox}

\subsection{整体思路}
\begin{figure}[!htbp]
    \centering
    \includegraphics[scale=0.3]{./pdf/2021e1_6.pdf}
    \caption{数字-模拟信号混合传输收发机示意图}
    \label{2021e1_6}
\end{figure}
键入的数字用单一点频的组合表示，每个数字对应不同的频率组合，建立起一个数字-频率组合表，然后由DAC将这些组合信号输出，由合路电路（加法器）将数字对应的频率组合信号和模拟信号加在一起，经放大器，功率放大器，天线输出。接收端经带通滤波器，放大器，解调器解调后，用ADC采集解调后的信号。
采集后的数据分两条支路进行处理，其中一条支路是对信号进行FFT运算，得到发送端的信号幅度谱，然后把它和预设的数字-频率组合表进行对照，得出对应的发送数字，然后显示。
另一支路，对信号做数字滤波处理，将除了函数发生器给的模拟信号以外的信号滤掉，然后经过DAC，再经过模拟滤波器。最终将模拟信号还原出去。
\subsection{发送端}
使用的是AM调制，占用的信道带宽是基带信号的2倍，而信号频率范围是50Hz~10kHz，要求信号带宽为25kHz以内，则我们能够使用的频率范围是0-50Hz，和10k-12.5kHz。低频范围周期较长，难以满足题目要求的2s内完成显示，故选择高频范围。
接下来重点要做的是理清发送的具体时序。题目要求发四个数字，我们这里依次进行发送，发送第一个数字用时250ms，经过150ms的空白间隔后，再发送第二个，然后再间隔150ms，以此类推，不断循环发送这四个数字。
编码，在10k-12.5kHz的范围内选择四个点频用来编码十进制数字，设计的原则是： 每个数字用尽可能少的频率表示。选择的频率要方便接受端还原模拟信号时滤除。频率之间的间隔要足够接收端进行 FFT 运算后分辨出来。
综上考虑，最后选择了 \( f_1 = 10.9\text{k} \)、\( f_2 = 11.0\text{k} \)、\( f_3 = 11.1\text{k} \)、\( f_4 = 11.2\text{k} \) 这四个频率。
\begin{figure}[!htbp]
    \centering
    \includegraphics[scale=0.3]{./pdf/2021e1_2.pdf}
    \caption{发送端}
    \label{2021e1_2}
\end{figure}
\subsection{接收端}
接收端带通滤波器使用LC无源滤波器，使用包络检波方法进行解调。解调后的信号放大到适合ADC采集的幅度范围内。ADC采集使用的采样率要大于最高频率的两倍，这里建议不要用过低的采样率，因为除了要进行FFT计算之外，还要进行数字滤波+还原信号，速率太低的话，经过DAC输出后，模拟滤波器难以恢复原来的时域信号。这里我采用102.5k的采样率。
采集后的数据分两个支路：
一条数据支路：将102.5k采样得来的信号再4抽点，得到采样率为25.625k的信号数据，对其进行1024点FFT，则频率分辨率约为25Hz。取合适的判决门限，判断f1，f2，f3，f4是否存在，然后根据发送的编码方式解码即可得出数字信号，再显示即可，若持续若干秒没有收到这四个频率，则熄灭显示。
另一条数据支路：使用FIR滤波器，截止频率约为10.1k（10k有衰减，测试的是单个点频波形不失真即可，没有要求很好的幅频特性曲线），配合DAC输出端的模拟滤波器，可以很好的滤除掉用来表示数字信息的那些频率成分。
\begin{figure}[!htbp]
 \centering
    \includegraphics[scale=0.3]{./pdf/2021e1_3.pdf}
    \caption{接收端}
    \label{2021e1_3}
\end{figure}

\subsection{负压电路}
题目要求只采用电池供电，但电源只有正电压，因此需一个负压电路以获得放大器工作的正负电源模块，本教材采用MC34063AD搭建，电路如图\ref{fig:mc34063_demo}所示。
\begin{figure}[!htbp]
	\centering
	\includegraphics[width=0.7\linewidth]{./fig/34063.png}
	\caption[负电压转换电路图]{负电压转换电路图}
	\label{fig:mc34063_demo}
\end{figure}

C34063芯片是一个高度集成的开关电源，其工作原理为。
	
1. 开关控制与储能（升压/反转核心）。
	
输入电源 VA12V → 给芯片供电（引脚6），内部晶体管通过引脚1（SWC）和引脚2（SWE）进行开关控制，周期性导通/截止。当开关闭合时，电感 LH2 被充电储能，电流从VA12V → 电感 → SWC → SWE → GND 流通，电感储能。当开关关闭时，电感极性反转，释放能量，通过二极管 D2 向负载和输出电容（C23）供能，此时输出为 负电压（-12V）
	
2. 输出整流与滤波
	
二极管 D2为肖特基二极管，快速导通，用于整流。C23（100μF）为主滤波电容，平滑输出电压C24（104）为高频去耦电容，滤除尖峰噪声最终得到稳定的 -12V 输出电压。
	
3. 反馈控制与稳定输出
	
输出电压通过分压电阻 R5（10k）和 R7（300）组成分压网络，回馈到 MC34063 的第5脚（CII），与内部基准（1.25V）比较，如果输出电压偏高，会减少占空比；反之增加占空比，实现闭环调节。R6（1.2k）连接在反馈环路，用于稳定增益或补偿。
	
4. 振荡频率设置
	
C21（470pF）连接在引脚3（TC），设定开关频率（f ≈ 1 / (1.1 × R × C)，R为内部电阻）

5. 电流限制保护
	
电阻R1（0.33Ω）连接在引脚7（Ipk），用于电流检测如果开关电流过大（超过设定限值），MC34063 会自动关断开关管，起到限流保护作用。MC34063 芯片工作电压范围3V-40V，当处于8V-28V范围波形平稳，如图2所示，输出波形为理论值-12V且输出波形平稳。当输入电压低于3V时输出电压小于理论值，如图3所示2V输入-9.6V输出，小于理论值-12V。随着输入电压降低，输出电压值绝对值减小，当输入电压在40-90V时随输出电压为理论值-12V但波形略有抖动，如图4所示50V输入-12V输出。当输入电压超过95V时，输出电压值绝对值减小，如图5所示95V输入-7.265输出。
\begin{figure}[!htbp]
	\centering
	\includegraphics[width=0.7\linewidth]{./fig/34063_simulatetion.png}
	\caption[对应输出]{输入为分别为12、3、50、95V时电压输出}
	\label{34063_simulaition}
\end{figure}
\subsection{起始位检测和编解码}
\subsubsection{起始位检测}
起始位的设置并不是需要很复杂，可以简单地在发送数字信号前，设置一个高电平来告诉进行解码的单片机开始传输数字信号了。或者也可以设置较为复杂一点。但是，必须明了一个前提，不能和需要传输的数字信号混淆，或者是难以让单片机检测到。

\subsubsection{编解码}
在传输数字信号试时，由于信道带宽要求，更加推荐使用占用频率资源少的ASK信号对数字信号进行发送，也就是说，需要把传输的十进制数先转换成二进制数（在此可以选择直接将数字转成二进制数，同样我们也可以通过BCD码转成二进制数，例如8421码，5421码，格雷码，余三码等等）。

甚至，为了使我们的数字信号具有一定的纠错能力，我们可以在转成了二进制数的前提下，再使用一些较为复杂的编码方式（如，LDPC编码方式）。但是，并不是很推荐使用这些复杂的编码方式，因为普遍来说，具有一定纠错能力的编码方式它的译码或者解码方式或多或少会有一点复杂，使用单片机这样的微型计算机系统处理时间都会较长，很难满足题目中开始发送到数码管显示的响应时间不大于 2 秒的要求。

在此，我选择的编码方式是先对要传输的数字编码成余三码，然后再进行LDPC编码。而对于如何从ASK信号转变成简单的0-1信号，就有许多种方法了。在此，简单讲述一下一种方法。

再通过接受信号在通过了数字滤波器后，经过一个OPA690放大幅值，在通过一个AD835进行自平方之后，最后可以通过一个模拟的低通滤波器，就可以得到一个在低电平比较平滑，在高电平略有波纹的一个0-1信号了。为了使高电平比较稳定，在过了低通滤波器后，还可以加一个比较器使高低电平稳定。

\begin{figure}[!htbp]
	\begin{minipage}{0.33\linewidth}
		\centering
		\includegraphics[width=1\linewidth]{fig/Original_ASK_signal.png}
	\end{minipage}
	\begin{minipage}{0.33\linewidth}
		\centering
		\includegraphics[width=1\linewidth]{fig/self_squared.png}
	\end{minipage}
	\begin{minipage}{0.33\linewidth}
		\centering
		\includegraphics[width=1\linewidth]{fig/low_pass.png}
	\end{minipage}
\end{figure}
在最后，就是译码方面的程序，对于LDPC编码方式来说，译码方式主要是有比特翻转法（实现极其简单，计算复杂度低，最适合使用单片机实现，但是纠错性能不佳，仅适用于信道质量较好的情况），和积算法（性能最优，但新规则计算复杂，最不推荐使用单片机实现），最小和算法（计算复杂度相较和积算法极大降低，而性能丢失不多，但使用单片机实现难度比比特翻转法略高）。而关于如何从简单的二进制数转到十进制数，在这里就不再赘述了。

附：在此附上LDPC的matlab仿真程序：\href{https://github.com/cea-wind/LDPCC}{https://github.com/cea-wind/LDPCC}
\begin{figure}[!htbp]
	\centering
	\includegraphics[scale=0.7]{visio/2021E_encode_and_decode.pdf}
\end{figure}

\subsection{另一种数字编解码实现}

\subsubsection{方案对比}

由于本题目要求传输的数据是四位固定的十进制数，并非无线传输系统中的数据流，故我们可以采用有异于传统的编解码方式。

常规方法是将四位数字编码为二进制序列，再通过特定的调制方式发送和接收。众所周知，由于方波具有谐波性，其在频域占据极大的频域宽度且与自身频率成正相关。

回到题目要求：

\begin{itemize}
	\item 信号带宽被限制在25kHz以内：
	
	在此条件下，高速二进制传输几乎不可能实现，只能采用较低频率，用时间换取带宽；同时数字信号与模拟信号将极难分离，对接收端的滤波器要求极高。
	\item 传输与识别数字时间不超过2秒：
	
	为了提高数字准确率，一组数据需要多次识别，这对二进制序列传输速度有一定的要求。
\end{itemize}
上述两点要求对平衡传输速率，带宽占用与接收端滤波器三者之间的平衡提出了很高的要求。

因此可以采用另一种编码方式：将四位十进制数转换为不同正弦频率的组合信号进行传输。
此方法有很多优点：
\begin{itemize}
	\item 频率调制的信号带宽较窄，可以通过滤波器轻松分离；
	
	实验室使用的H743单片机有较高的ADC采样率，能够满足高频率正弦波的采样要求，且自带DSP功能，结合CMSIS-DSP中的FFT算法，可以实现高效的频率检测，频谱分辨率可以轻松达到Hz级别。
	这对编码提供了极大的便利，在编码环节，可以在及窄的带宽内选择较多的频点进行编码。这使得数字信号与模拟信号的分离变得简单。
	\item 识别准确率高，速度快；
	
	在100Hz的频谱分辨率条件下，采集一次信号仅需1ms，且一次采集即可识别全部四位数字，结合H743的高性能DSP计算能力，采集与识别数字可以在10ms内完成，鉴于此，在时间限制的2秒内可以多次采集识别，极大提高了识别准确率。
	使用频率组合可以同时传输四位数字
	\item 极大简化发送、接收机设计复杂度：

	发送机：
	只需设计一个正弦波发生器，产生特定频率的正弦波即可，可以简单使用单片机的DAC输出。
	接收机：
	首先对于数字信号识别：无需设计滤波器滤除模拟信号，直接通过FFT算法识别特定频率范围即可，极大简化了接收机的设计。
	其次对于模拟信号：只需要设计一个低通滤波器即可，滤除数字信号的高频成分，保留模拟信号的低频成分。且由于数字信号的频率较高，带宽较窄，滤波器的卷滚系数可以设计得较小，滤波器的阶数也可以较低，极大简化了模拟信号的接收机设计。

	\item 系统功耗低：
	系统复杂的降低了功耗，尤其是在待机模式下，发送机和接收机都可以进入低功耗状态，进一步延长系统的使用时间。
\end{itemize}

\subsubsection{具体编码实现}
由于传输会影响信号的幅度，故编码不采用绝对大小编码，采用标志位+相对大小的编码方式。其次，由于频率有无的“0”位置判断易受干扰，所以所有频率点位置都需要发送。
图\ref{fig:decode_fft_out}为编码示意图，其中最高的频率为标志位，其他频率为根据与标志位的大小关系编码不同的数值，相对大小划分区间越小，一个频点可以表示的数值范围越大，所使用的频点数越少，编码效率越高。
一个频点表示一位数字时（也就是十进制），数据位需要被划分为11个区间，考虑到传输精度，这样是行不通的。笔者综合带宽使用和传输精度，选择了一个频点表示5位数字的编码方式（五进制）。
同时为了提高编码效率，标志位可以采用动态位置，这样可以实现标志位同时实现大小参考和数据的携带，减少一个频点的使用，节省带宽。

下面分析图示编码如何计算：

1、找到最高频率点位的位置，其在频谱峰的位置即是它的数值，剩余的为数据位，将数据位的大小与标志位相比较即可的到数据位的值。

2、如图所示，数据位的值为$41024_{(5)}$，动态标志位的位置为频谱峰的第3个，那么他的数值为2（标志位数值范围是0-5），那么结合数据位和标志位的数值即可得到该组数值为$241024_{(5)}$。

3、将得到的5进制数值转换为十进制数值即完成解码，图示数值为$241024_{(5)}=2 \times 5^5+4 \times 5^4 + 1 \times 5^3 + 0 \times 5^2 + 2 \times 5^1 + 4 \times 5^0 = 8889_{(10)}$。


\begin{figure}[!htbp]
    \centering
    \includegraphics[width=\textwidth]{./fig/decode_fft_out.png}
    \caption{解码图示}
    \label{fig:decode_fft_out}
\end{figure}

编码只需要根据进制转换得到的数值进行波形产生即可，此处不再赘述。$8889_{(10)}$的理论波形如图\ref{fig:code_wave_matlab}所示，单片机实际产生波形如图\ref{fig:code_wave}所示。

\begin{figure}[!htbp]
    \centering
    \includegraphics[width=\textwidth]{./fig/code_wave_matlab.png}
    \caption{编码波形}
    \label{fig:code_wave_matlab}
\end{figure}

\begin{figure}[htbp]
    \centering
    \includegraphics[width=\textwidth]{./fig/code_wave.PNG}
    \caption{DAC输出波形}
    \label{fig:code_wave}
\end{figure}

在详细说明了编解码原理后，我们可以得到这种方法的另一个优点：数据是通过频率幅值的相对大小来传输的，这使得数据传输具有一定的抗干扰能力。由于频率幅值的相对大小不易受到噪声的影响，因此在信道质量较差的情况下，仍然可以较为准确地识别出数据。
同时相位不影响数据传输，这使得系统在面对相位抖动时仍然能够保持较高的传输准确率，这两点成为其抗干扰能力的核心，传输准确性远高于传统方法。

\subsection{数字滤波器实现实时处理的详细算法}

本节重点阐述如何通过STM32单片机结合DMA中断机制，实现高阶FIR数字滤波器的实时处理。本文所使用的滤波器配置与参数设计已在第六章详细说明，此处着重介绍实时处理流程与主程序配合的实现方法。

\subsubsection{1. 实时处理架构概述}

本架构采用ADC+DMA+FIR滤波器处理+DAC输出的信号处理流程，核心采用双缓冲机制，结合中断方式实现对采样数据的分块实时滤波处理。同时，系统中设置高速定时器控制采样频率，并通过DAC将滤波后的结果输出，用于波形观察或后级应用处理。
\begin{figure}[!htbp]
    \centering
    \includegraphics[width=0.2\textwidth]{./visio/DMA实时滤波程序流程图1.pdf}
    \caption{DMA实时滤波程序流程图}
    \label{fig:dma-flowchart}
\end{figure}

\subsubsection{2. 主函数初始化流程}

主函数中完成了滤波器初始化、定时器启动、ADC校准与DMA启动等一系列配置，如代码所示：

\begin{lstlisting}[language=C,caption={主函数初始化代码},label={lst:maininit}]
int main(void)
{
  // 滤波器初始化
  fliter_init_f32();       // 低通实时数字滤波器初始化
  fliter_init_f32_hp();    // 高通实时数字滤波器初始化

  // 定时器初始化设置，实现采样率控制
  pre2 = 40 - 1;
  arr2 = 50 - 1;           // 对应400kHz采样率
  TIM2_Init(pre2, arr2);   // 初始化TIM2
  HAL_TIM_Base_Start(&htim2);
  HAL_TIM_Base_Start(&htim1);

  // ADC2校准与DMA启动
  HAL_ADCEx_Calibration_Start(&hadc2, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED);
  HAL_ADCEx_Calibration_Start(&hadc2, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED);			
  HAL_ADC_Start_DMA(&hadc2, (uint32_t *)ADC1_VALUE, ADC_LENGTH);

  // 主循环DAC状态检测
  TIM1->CNT = 0;
  while (1)
  {
    if ((TIM1->CNT) >= 10000)
    {
      HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
      TIM1->CNT = 0;
    }
  }
}
\end{lstlisting}

\subsubsection{3. 双缓冲机制与中断处理流程}

本系统采用DMA的双缓冲模式，当一半数据搬运完成后即触发中断，处理当前缓冲区的数据并进行滤波。使用\texttt{DMA\_CONVERSION}变量判断处理起始地址，确保两块缓冲区交替使用。

\begin{figure}[!htbp]
  \centering
  \includegraphics[width=0.6\linewidth]{./visio/DMA双缓存处理的一种方式.pdf}
  \caption{双缓冲机制方案1（START/END指针分区处理）示意图}
  \label{fig:double_buffer}
\end{figure}

还有另外的一种采用全满和半满中断的双缓冲程序逻辑，现简述其处理流程
\begin{figure}[!htbp]
    \centering
    \includegraphics[width=0.2\linewidth]{./visio/基于全满半满中段的DMA双缓冲DAC实时输出.pdf}
    \caption{双缓冲机制方案2（基于全满半满中断函数处理）示意图}
    \label{fig:dma-flowchart-2}
\end{figure}
\subsubsection{4. 中断服务函数实现}

以下为ADC2 DMA传输完成的中断服务函数，负责计算缓冲区起始与终止地址，调用滤波器函数进行实时处理，并在首次处理中启动DAC输出：

\begin{lstlisting}[language=C,caption={DMA2\_Stream0中断服务函数},label={lst:dma_irq}]
void DMA2_Stream0_IRQHandler(void)
{
  HAL_DMA_IRQHandler(&hdma_adc2);

  START = (HALF_ADC_LENGTH) * DMA_CONVERSION;
  END = (HALF_ADC_LENGTH) * (DMA_CONVERSION + 1);
  DMA_CONVERSION++;
  DMA_CONVERSION %= 2;

  fliter_init_f32_LP_MAX();    // 200阶低通滤波器初始化
  arm_fir_f32_lp_10500();      // 低通滤波函数调用
  fliter_init_f32_hp();        // 高通滤波器初始化
  arm_fir_f32_hp_11500();      // 高通滤波函数调用
  DECODE_222();                // 自定义解码处理

  if (START_DAC == 0)
  {
    START_DAC = 1;
    HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, 
      (uint32_t *)DAC1_VALUE, ADC_LENGTH, DAC_ALIGN_12B_R);
  }
}
\end{lstlisting}

\subsubsection{5. 多种滤波器函数嵌套调用}

中断中顺序调用低通、高通两类滤波器函数，实现对目标频段信号的带通提取或复合滤波效果。这些函数使用CMSIS-DSP库的\texttt{arm\_fir\_f32}接口，具有结构清晰、效率高、延迟低等优势，适用于高采样率的实时信号处理。

\subsubsection{6. 实时性与稳定性保障}

本架构通过定时器控制采样周期、DMA实现采样数据搬运、FIR滤波器快速处理，确保处理延迟远小于采样周期，满足实时滤波要求。中断处理时间固定，DAC输出延时可控，且首次触发由\texttt{START\_DAC}变量控制，仅在第一帧数据处理完成后启动一次，避免多次初始化干扰系统运行。

\subsubsection{7. DAC自启动问题与主循环设计}

在调试过程中，我们小组遇到了一个看似简单、但实际运行中影响很大的问题：如果主循环中什么都不做，系统上电后，DAC输出的滤波波形始终无法自动显示。示波器上没有任何波形输出，必须使用调试工具（如Keil的单步运行）才能让DAC成功输出。这种现象很容易让人误以为是DMA或滤波算法出错，但其实根本原因另有所在。

\paragraph{问题原因分析}

经过深入排查，我们发现DAC的DMA启动是在DMA中断函数中完成的，如下所示：

\begin{lstlisting}[language=C]
if(START_DAC == 0)
{
  START_DAC = 1;
  HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, 
    (uint32_t *)DAC1_VALUE, ADC_LENGTH, DAC_ALIGN_12B_R);
}
\end{lstlisting}

这个逻辑意味着，只有当ADC完成一次DMA搬运，系统触发中断后，才会真正启动DAC输出。而如果主循环执行完初始化就空转，CPU没有活跃运行，系统在某些启动条件下就可能迟迟等不到第一个中断触发，从而导致DAC永远不启动。更麻烦的是，这种情况不会报错，只有用示波器或调试工具才能发现波形根本没输出。

\paragraph{我们的解决办法：让主循环“忙起来”}

为了避免系统陷入这种“等中断但等不到”的状态，我们在主循环中加了一段基于定时器的GPIO翻转逻辑，让系统持续保持活跃状态。代码如下：

\begin{lstlisting}[language=C,caption={主循环中防止DAC失效的辅助逻辑},label={lst:dac_auxloop}]
TIM1->CNT = 0;
while (1)
{
  if ((TIM1->CNT) >= 10000)
  {
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0); // 心跳指示灯
    TIM1->CNT = 0;
  }
}
\end{lstlisting}

这里我们让定时器1不断计数，每当到达一定阈值，就翻转一次PB0口的电平，用作LED闪烁。这其实是一个非常常见的“系统心跳灯”设计，不仅方便观察系统是否运行，还保证了主循环不会闲置，为中断触发创造了条件。这样做之后，系统每次上电都能稳定启动DAC并正常输出滤波波形。

一些补充说明如下：
\begin{itemize}
  \item \texttt{TIM1}在这里不需要开启中断，只作为一个自由运行的计时器；
  \item 即便DAC中断没触发，LED闪烁也能起到运行状态提示作用，方便排查；
  \item 该方法简单高效，特别适合竞赛或调试环境中使用。
\end{itemize}

\paragraph{进一步的改进建议：提前启动DAC}

虽然上面的方法很好用，但从系统健壮性角度出发，我们建议可以将DAC DMA的启动直接放在主函数初始化阶段。这样就不依赖第一次DMA中断了，启动流程更加直接：

\begin{lstlisting}[language=C]
fliter_init_f32();  // 初始化滤波器，确保DAC缓冲区有有效数据
HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, 
  (uint32_t *)DAC1_VALUE, ADC_LENGTH, DAC_ALIGN_12B_R);
HAL_ADC_Start_DMA(&hadc2, (uint32_t *)ADC1_VALUE, ADC_LENGTH);
\end{lstlisting}

这里要注意的一点是：\texttt{DAC1\_VALUE[]}数组必须提前准备好初始数据，不能是全0或未初始化状态，否则即使成功启动了DAC，也可能不会有期望的输出波形。

\paragraph{小结}

这个“DAC无法自动输出”的问题虽然不是算法错误，但它揭示了嵌入式系统中常见的一类陷阱：模块启动依赖顺序不明确。通过主循环中加入适当的辅助逻辑，或者调整初始化时序，我们可以让系统运行更加稳定、可靠，避免“启动假死”的问题再次出现。

\subsection{软件设计}
本赛题的软件设计分为两部分。发送端的设计重点在于通过单片机控制DDS产生符合条件的信号，接收端的设计重点在于信号的解调与滤波。
\subsubsection{流程概述}
软件流程图如图\ref{2021ETX}和\ref{2021ERX}所示。

发送端需要实现的功能分为“载波频率选择”“语音信号发送”和“数字信号发送”。“载波频率选择”功能简单，控制DDS产生高频信号即可。“语音信号发送”需发送一50-10KHz的语音信号，这里使用一固定频率的信号代替。“数字信号发送”需传送4位数字，较为复杂。首先看题目要求，“信道带宽不大于25KHz”，语音信号已经占了10KHz，当采用AM调制时，调制后产生双边带，留给数字信号的就只剩2.5Khz。这里可通过5种频率在10K-12.5KHz的信号来辨别数字。1种信号用作起始位辨别，另外4种频率的信号通过10种组合来表示0-9十位数字。这10种组合为：单独的$f_1$-$f_4$4种，4种信号两两不相同组合6种。

接收端需要实现的功能分为“分离模拟信号与数字信号”“数字信号识别”和“数码管控制”。“分离模拟信号与数字信号”的功能使用10K低通数字滤波器即可实现。“数字信号识别”相对复杂。先将获取到的20组fft变化后的频谱峰值存入一矩阵，然后通过对照表将这20组数据与起始位和0-9这10位数一一对应，最后以起始位为边界划分出数组，为减小误差仅取4位且出现次数最多的数组作为最终结果。“数码管控制”的部分，首先保证数码管初始状态为熄灭，这样仅传输模拟语音信号时数码管满足熄灭的条件，其次为实现“数字信号停止传送5s后数码管熄灭”的功能，先用一定时器定出5s，定时器触发时检测某变量是否满足条件，当且仅当存储频谱峰值的矩阵中有起始位时该变量满足条件，若检测时不满足条件，则使数码管熄灭。

\begin{figure}[!htbp]
	\centering
	\includegraphics[scale=0.4]{./visio/2021ETX.pdf}
	\caption{发送端流程图}
	\label{2021ETX}
\end{figure}

\begin{figure}[!htbp]
	\centering
	\includegraphics[scale=0.4]{./visio/2021ERX.pdf}
	\caption{接收端流程图}
	\label{2021ERX}
\end{figure}

\section{2019年G题：双路语音同传的无线收发系统}
\subsection{题目和分析}
\section{2017年F题：调幅信号处理实验电路}
\subsection{题目和分析}
\subsection{硬件设计}
\subsection{软件设计}


\chapter{常用芯片参考设计}
近几年参加竞赛过程中，我们发现，竞赛不再要求在赛程中制作电路板，转而通过平时积累的模块电路完成硬件搭建，这些模块电路主要包括信号调理，如滤波器、放大器、移相器，调制解调电路，如乘法器、锁相环。这些模块电路通常采用芯片辅以周边电路构成，设计和测试模块，变成了竞赛的一项重要内容，平时积累完善可靠的模块电路，是赛程时间内搭建电路的基石。在本章中，将实验室平时使用的模块电路设计过程和测试方法予以详细阐述，便于参赛读者参考。
\section{可变增益放大器VCA821}
竞赛中，常见需对信号进行幅度稳定的场合，即信号增益需可控。例如，2023年调制度识别装置，要求输出电压限制在某一范围。在备赛过程中，通常应用VCA821来完成满足此类应用。VCA821是德州仪器半导体产生的一种直流耦合、宽带、dB线性、连续可变、电压控制增益放大器。它提供差分输入到单端转换，高阻抗增益控制输入用于将增益从增益电阻(RG)和反馈电阻(RF)设置的标称最大增益降低40dB。

VCA821 器件内部架构由两个输入缓冲器和一个输出电流反馈放大器级组成，并集成了乘法器核心，以提供完整的可变增益放大器 (VGA) 系统，无需外部缓冲。最大增益由两个电阻在外部设置，为设计提供了灵活性。最大增益应设置在 6 dB 和 32 dB 之间。VCA821 器件采用 ±5V 电源供电，其增益控制电压可在控制电压从0V变化至+2V时以dB 为单位线性调整增益。例如，将最大增益设置为20dB，VCA821器件在VG=+2V时提供 20 dB，在VG=0V时提供小于–20dB增益。VCA821器件提供出色的增益线性度。对于20dB最大增益，增益控制输入电压在+1V和+2V间变化，增益偏差不超过±0.3 dB（+25°C时最大）。

实验室使用VCA821结合OPA695，OPA820和AD8361构成的AGC模块，在历届电赛中都获得了应用。本节将先说明VCA821的基本使用使用方法，然后介绍实验室设计的两款基于VCA821模块，并提供模块的测试数据供参考和复现。

\subsection{VCA821基本原理和典型电路}
VCA821是电压控制的可变增益放大器，具有差分输入和单端输出。最大增益由外部电阻设置，而增益范围由外部模拟电压控制。VCA821可采用单端或差分输入信号操作。输入在所有增益配置中均呈现一致的高阻抗。构成AGC电路时，采用类似\ref{fig:agc_diagram}的电路结构。$V_{REF}$端可设定积分器的比较电压，该电压可以最终影响电路的稳幅输出电压。
\begin{figure}[!htbp]
	\centering
	\includegraphics[scale=0.4]{./pdf/vca821_agc_diagram1.pdf}
	\caption{AGC电路原理框图}
	\label{fig:agc_diagram}
\end{figure}

\subsection{VCA821构成AGC电路}
AGC电路如图\ref{fig:vca821_agc_sch}所示，信号由原理图最左侧的J2和J3端口输入，先经过VCA821（芯片U1A）放大后，再经过三片OPA659（U3、U4、U6）构成的三级放大后输出，AGC电路输出端为原理图最右侧的端口J9。该输出信号经R31-R33构成的$\pi$型阻抗匹配，进入AD8361（芯片U5）构成的有效值检测电路，有效值信号进入OPA820（芯片U2）构成的积分电路，积分输出（芯片U2的6脚）连接VCA821的压控端（芯片U1A的2脚），完成反馈环路。


电位器RV1可调节积分电路的参考电压，当跳线J6选择RV1作为参考电压时，可通过RV1改变输出信号幅度，当跳线J6还可选择J7的外部参考电压，以改变输出信号幅度。

电位器RV3和RV2，分别调节VCA821的输入和输出的失调电压或偏置电压，因VCA821器件使用的内部架构，输出失调电压源自输出级以及输入级和内部乘法器核心。调节时，应从输出级补偿开始，先设置VG=–1V，以消除输入级和乘法器核心的所有失调。接着调整输出级失调补偿电位器RV2。最后，调节VG=+1V，设置为最大增益，并调整输入级和乘法器核心电位器RV3。此过程可有效消除最大增益下的所有失调贡献。但由于调整增益会改变输入级和乘法器核心的贡献，因此会保留一些残余输出失调电压。详细说明可见VCA821手册\cite{texas_instruments_vca821_2016}9.3.6节偏置调整。

电路中有多个跳线帽其作用可见表\ref{tab:AGC_jumper_info}
\begin{table}
	\centering
	\caption{AGC电路跳线帽用途说明}
	\begin{tabular}{|c|c|c|}
		\hline
		\textbf{跳线标识} & \textbf{作用} & 芯片 \\ \hline
		J4 & 选择VG电压提供，外部端口J5或反馈环路 & U1 \\ \hline
		J6 & 积分器参考电压提供，外部端口J7或电位器RV1 & U2 \\ \hline
		J8 & 电源参考控制，电源参考模式接VPOS，否则接接地 & U5  \\ \hline
		J10 & 输出参考控制。开路时为内部参考；否则接VPOS，勿接地  & U5 \\ \hline
	\end{tabular}
	\label{tab:AGC_jumper_info}
\end{table}

\begin{sidewaysfigure}
	\centering
	\includegraphics[scale=0.7]{./pdf/vca821_agc_sch.pdf}
	\caption{VCA821构成的AGC电路原理图}
	\label{fig:vca821_agc_sch}
\end{sidewaysfigure}

\subsection{元件参数选择}
本模块有较多的阻容元件取值需计算获得，这里分别说明。依据器件手册，VCA821（芯片U1A）用2$\times$(R8/R6)决定最大放大倍数，输入阻抗通过R3和R4设置为50$\Omega$电阻接地；输出阻抗通过R12设置为50$\Omega$电阻串联输出。对于SOIC-14封装，有一个电压参考引脚VREF(引脚9），此引脚需经20$\Omega$电阻接地，以避免输出级可能出现的振荡。OPA695的增益通过两个电阻设定，如U3芯片的R14和R13，约可获得10dB增益，反馈电阻过小会引起震荡，设定标准可参考芯片说明书。AD8361输入端，75$\Omega$外部分流电阻（R29）与交流耦合输入相结合，提供接近50$\Omega$的总宽带输入阻抗，使用了$\pi$型衰减网络，R31-R33选择136$\Omega$、72$\Omega$、136$\Omega$可提供15dB衰减。U2的积分常数受R11和C18控制，时间常数$\tau=\frac{1}{2\pi\sqrt{RC}}$。特别的，竞赛中，经常遇到需要稳幅调幅信号的场合，若时间常数过长，则可能将信号包络纳入稳幅，导致包络丢失，在此情况下，可适当缩短时间常数。

\section{宽带乘法器AD835}
历次竞赛中，团队均使用AD835构成乘法器获得调幅信号，它是TI公司设计的一款完整的四象限电压输出模拟乘法器，且只需极少的外部器件。所谓四象限乘法器，指可在四个象限内进行精确模拟乘法，两个输入X和Y可为正也可为负，输出同样也可以是正或负。从电路角度来看，四象限乘法器可以被理解为两个输入信号均为双极性的模拟乘法器。

AD835芯片可产生X和Y电压输入的线性乘积，-3dB输出带宽为250MHz（小信号上升时间为1ns）。满量程（-1V至+1V）上升至下降时间为2.5 ns（采用150Ω标准负载），0.1\%建立时间（电路从输入信号发生变化到输出信号稳定在某个指定误差范围内所需的时间）通常为20ns。其差分乘法输入（X, Y）和求和输入（Z）处于高阻态。低阻抗输出电压（W端口）最高可达±2.5 V，可驱动低至25Ω的负载。工作电压±5V。AD835不仅具有出众的速度性能，且易于使用，功能丰富。例如，除允许在输出端添加信号外，Z输入端还能使AD835的工作电压放大高达约10倍。此外，该乘法器的乘积噪声非常低（50 nV/√Hz）。

AD835可进行高速乘法、除法、平方运算，进行宽带调制和解调，进行相位检测和测量以及对正弦波频率加倍。可用于视频信号增益控制和键控，电压控制放大器和滤波器。高输入阻抗(100kΩ$||$2pF)使得信号源负载可忽略不计。高输出电流能力支持驱动低阻抗负载。
\subsection{AD835基本原理和典型电路}
\subsubsection{基本原理}
该乘法器基于经典乘法器电路形式，具有一个跨导线性内核，由三个（X、Y和Z）线性化电压-电流转换器和负载驱动输出放大器提供支持。缩放电压（方程中的分母 U）由带隙基准(提供一个与温度无关且稳定的电压基准)提供，并针对超低噪声进行了优化.

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.5]{./fig/AD835-basic.png}
	\caption{AD835的原理框图}
	\label{AD835.basic.diagram}
\end{figure}
一般来说，AD835提供了
\begin{eqnarray}\label{AD835.basic.formula}
	W=\frac{(X1 - X2)(Y1 - Y2)}{U} + Z
\end{eqnarray}

其中，变量W、U、X、Y 和Z都是电压。作为简单的乘法器连接，X = X1 − X2、Y = Y1 − Y2 和 Z = 0，并采用设置 U = 1V的比例因子调整，见图\ref{AD835.basic.diagram}，输出可以表示为 W = XY。
\subsubsection{缩放调整}
公式\ref{AD835.basic.formula}中U的基本值通常为1.05 V。图\ref{AD835.Multiplier-connection.diagram}展示了如何调整U的有效值以使其具有更低的电压（通常调整为 1 V），通过在W（引脚5）和Z（引脚4）间使用电阻分压器（一般使用所示的电阻值），公式\ref{AD835.basic.formula}可以改写为
\begin{eqnarray}
	W = \frac{XY}{U} + kW + (1 - k)Z' 
\end{eqnarray}

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.5]{./fig/AD835-Multiplier-connection.png}
	\caption{AD835乘法连接}
	\label{AD835.Multiplier-connection.diagram}
\end{figure}

其中输入信号$Z'$应该与引脚 4 处的信号 Z 区分开来，因此
\begin{eqnarray}
	W = \frac{XY}{(1 - k)U} + Z'
\end{eqnarray}

这样，不需要改变 $Z'$ 输入的缩放比例，U的有效值就可修改为$U'$ = (1 − k)U。这样可使得$Z'$输入成为W输出的唯一地参考。

因此，要将$U'$设置为1V（注意U的基本值为1.05 V），就要将R1的值设置为$20\times R2$。

图\ref{AD835.Multiplier-connection.diagram}展示了AD835乘法器的基本连接。输入信号通常在同一侧，在这种情况下，X2（引脚7）和Y2（引脚2）通常接地。

在应用宽带电路时，电源去耦和谨慎的电路板布局始终很重要，应严格遵循图\ref{AD835.Multiplier-connection.diagram}所示的去耦建议。在图\ref{AD835.wideband_voltang_control_amp} 、图\ref{AD835.AM}  和图\ref{AD835.double_freq}  中，为了图中电路清楚明了，省略了这些电源去耦元件。但在高频输入时，需要应用这些电源去耦元件使AD835在使用时有最佳能效。

\begin{figure}[htbp]
	\centering
	\includegraphics[width=0.9\linewidth]{./fig/AD835bandwidth.png}
	\caption{AD835乘法器输出带宽}
	\label{AD835.bandwidth}
\end{figure}

通过配置频谱仪的跟踪源（Tracking Generator）模式，可将频谱仪转换为标量网络分析仪（SANA, Scalar Analyzer），用于测量AD835乘法器的幅频响应特性。测试条件如下：
\begin{itemize}
	\item 乘法器：固定增益 U' = 1（乘法器增益控制电压），Z端口接GND；
	\item 连接：跟踪源输出端→AD835输入端（X/Y），AD835输出端（W）→频谱仪输入端；
	\item 频谱仪参数设置：扫描频率范围0 Hz– 1 GHz，分辨率带宽（RBW）1 MHz，跟踪源输出功率0 dBm。
\end{itemize}

测试结果如图\ref{AD835.bandwidth}所示，AD835输出端（W）的幅频响应曲线在215 MHz处衰减至-3 dB，表明其实测带宽（-3 dB带宽）约为215 MHz。

\subsubsection{宽带压控放大器}
图\ref{AD835.wideband_voltang_control_amp}显示了配置为提供0dB至12dB标准增益的AD835。（事实上，控制范围为远低于–12dB到大约+14 dB）。R1和R2将增益设置为标准值×4（原理同缩放调整）。随着增益的增加而来的带宽降低被增加的峰值电容 C1 部分抵消。对于 G = 0 dB，则可以省略 R1 和 R2，并将引脚 Z 直接连接到地参考。

附：电压增益计算：
\begin{eqnarray}
	Gain(dB) = 20\log_{10} (\frac{V_{out}}{V_{in}})
\end{eqnarray}
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.5]{./fig/AD835_wideband_voltang_control_amp.png}
	\caption{采用AD835的压控50MHz放大器}
	\label{AD835.wideband_voltang_control_amp}
\end{figure}

如图 \ref{AD835.VCA_AC_response} 所示，为该放大器在增益为0dB（V=0.25 V）、6 dB（V=0.5V）和12dB（V=1V）时的交流响应。在此应用中，电阻值略有调整，以反映U=1.05V的基本值。同时，整体信号的增益由$V_G$控制。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.4]{./fig/AD835_VCA_AC_response.png}
	\caption{VCA的交流响应}
	\label{AD835.VCA_AC_response}
\end{figure}
\subsubsection{幅度调制器}
图 \ref{AD835.AM} 展示了一个简单的幅度调制器。 Y （引脚1）和 Z （引脚4）输入载波， X（引脚8） 输入调制信号。对于零调制，没有乘积项，因此载波输入只是通过 Z 输入的电压跟随器动作以单位增益复制。当X=1V 时，RF输出增加一倍，而当X=–1V时，它被完全抑制。也就是说，大约±1 V（实际±U 或约1.05 V）的X输入对应于100\%的调制指数。载波 和 调制频率最高可达 300 MHz，略高于 −3 dB 带宽。

当然，可以通过省略 Z 输入信号的前馈，将Z（引脚4）接地来实现抑制载波调制器。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.5]{./fig/AD835_AM_modulator.png}
	\caption{采用AD835的简单幅度调制器}
	\label{AD835.AM}
\end{figure}

\subsubsection{平方和倍频}
输入信号E的幅域平方只需将X和Y输入并联以产生 $E^2/U$输出即可实现。输入信号可以具有任一极性，但在这种情况下，输出信号始终为正。可以通过交换X或Y输入来反转输出极性。
当输入为正弦波 $E \sin \omega t$ 时，信号平方器的行为类似于倍频器，因为
\begin{eqnarray}\label{AD835.double_freq.formula}
	\frac{(E\sin \omega t)^2}{U} = \frac{E^2}{2U}(1 - \cos 2\omega t)
\end{eqnarray}
虽然这是有用，但公式 \ref{AD835.double_freq.formula} 显示了输出端的直流项，它与输入的幅度E变化很大。

图 \ref{AD835.double_freq} 显示了一个倍频器，它克服了这一限制，并在中等宽的频率范围内提供相对稳定的输出，由时间常数 R1C1 决定。施加到X 和 Y的 输入的电压在频率 $f = \frac{1}{2\pi C1R1}$ 时正好正交，并且它们的幅度相等。在较高频率下，X 的输入信号变得更小，而Y输入信号的振幅增加;在较低频率下，情况正好相反。结果是以地参考为准的倍频输出的1V幅度与输入的1V幅度相比，在±10\%的频率范围内仅变化0.5\%。因为输出端没有平方直流分量，所以输入幅度的突然变化不会导致直流电平反弹。
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.5]{./fig/AD835_double_freq.png}
	\caption{采用AD835的宽带零反弹倍频器}
	\label{AD835.double_freq}
\end{figure}

此电路基于恒等式
\begin{eqnarray}
	\cos \theta \sin \theta =\frac{1}{2}\sin 2 \theta
\end{eqnarray}
当 $\omega_o = \frac{1}{C1R1}$ 时，X 输入领先输入信号 $45^{\circ}$（衰减 $\sqrt{2}$，而 Y 输入比输入信号滞后 $45^{\circ}$，也衰减 $\sqrt{2}$。由于 X 和 Y 输入的相位相差 $90^{\circ}$，因此电路的响应为
\begin{eqnarray}
	W = \frac{1}{(1-k)U} \frac{E}{\sqrt{2}}\sin (\omega t - 45^{\circ})\frac{E}{\sqrt{2}}\sin (\omega t + 45^{\circ}) = -\frac{E^2}{4(1-k)U}\cos(2\omega t)
\end{eqnarray}
没有直流分量。R2 和 R3用于在 1 V 的输入幅度下将输出恢复为 1 V（与前面提到的增益调整相同）。由于电容两端的电压 （C1） 随频率的增加而减小，而电阻两端的电压 （R1）增加，因此输出的幅度随频率的变化仅略有变化。事实上，在该频率的 90\% 和 110\% 处，它仅比其满值（在其中心频率 $\omega = \frac{1}{C1R1}$ 处）低 0.5\%。

\subsection{AD835构成乘法器电路}
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.4]{./fig/AD835-use.png}
	\caption{AD835模块原理图}
	\label{fig:AD835.use}
\end{figure}



图\ref{fig:AD835.use}为实验室所使用的AD835乘法器模块的原理图。模块大致可以分成三个部分，供电、AD835及其周围电路、OPA695及其周围电路。

对于供电部分，二极管用于用于保护电路，防止反向电流，电容C1、C2、C3、C4、C5等用于电源去耦，确保电源的稳定性和减少噪声，从而给AD835的3号和6号引脚，OPA695的4号和7号引脚供电。

对于AD835及其周围电路，由RF5和RF1输入X1和Y1的值，由于此时X2以及Y2均为0，X的值即为XIN，Y的值即为YIN。

由分压可知
$\frac{W - Z}{R12}=\frac{Z-ZIN}{R11}$
从而可得
$Z=\frac{1}{21}W+\frac{20}{21}ZIN$

已知U为1.05V,则由$W=\frac{(X1 - X2)(Y1 - Y2)}{U} + Z$
可得$W=XY+ZIN$

对于OPA695及其周围电路，其设计目的在于放大来自AD835乘法器的信号并从RF4输出，由虚短虚断可知，增益为$1+\frac{R4}{R7}$，从而可以通过调整R7和R4来调整输出信号的幅值。


\subsection{元件参数选择}
图\ref{AD835.Multiplier-connection.diagram}中展示了\textbf{基本的乘法器}连接方式及去耦电容的容值选择，输出公式为$W = \frac{XY}{(1 - k)U} + Z'$，其中k的取值为$k = \frac{R2}{R1+R2}$。
因此，为了将U'设为1V，基于数学关系，已知U的值为1.05V，则R1的值应为R2的20倍，这样$k = \frac{1}{20+1}=0.0476$，$U' = {(1 - k)U} = 1$。
在许多应用中，乘法器的增益精度可能不做要求。在这种情况下，可以省略调整网络，或者像本实验室使用的乘法器模块一样，根据数据手册推荐，R2取100Ω，R1取2kΩ（对应1V）。

\textbf{宽带压控放大器}和\textbf{幅度调制器}分别按图\eqref{AD835.wideband_voltang_control_amp}和图\eqref{AD835.AM}连接和选型即可。

根据图\ref{AD835.double_freq}中展示的\textbf{宽带零反弹倍频器}，我们需要选择R1和C1，首先确定电路的目标工作频率f。电容C1的选择通常由电路中所需的频率响应和电容的可用范围来决定，对于高频信号，通常选择较小的电容值，取值在pF到uF之间。一旦确定了电容C1的值，可以根据公式\ref{AD835.double.formula} 可以得到电阻R1的值。
\begin{eqnarray}\label{AD835.double.formula}
	R1 = \frac{1}{2\pi fC1}
\end{eqnarray}
例如，如果目标频率f=10MHz，并且选择了C1=10pF，那么：
\begin{eqnarray}
R1 = \frac{1}{2 \pi \times 10 \times 10^6 \times 10 \times 10^{-12}} \approx 1.59 \, \text{k}\Omega
\end{eqnarray}
\section{超宽带电流反馈运算放大器OPA695}
OPA695是一款高带宽电流反馈运算放大器，其压摆率可高达4300V/$\mu s$，低输入电压噪声，可提供精密、低成本、高动态范围的中频 (Intermediate Frequency，IF) 放大器。OPA695针对高增益应用进行了优化，非常适合缓冲IF条中的表面声波(SAW)滤波器，或为电缆调制解调器上行线路驱动器提供低失真的高输出功率。在低增益下，带宽高达1400MHz，使OPA695成为支持高分辨率RGB应用的出色视频线路驱动器。
\subsection{OPA695基本原理和典型电路}
如图\ref{fig.OPA695SCH}. OPA695：具有高带宽，大信号带宽 (2VPP)：540MHz，超高压摆率：5000V/µs的特点。电流反馈机制：输入级将输入电压信号转换为输入电流信号，通过内部电流镜等结构将输入电流传递到输出级，输出级再将电流信号转换为输出电压信号，实现信号放大。这种电流反馈架构使其具有高带宽和超高压摆率.与VCA821等构成的多级放大电路：VCA821是可变增益运放，OPA695可与之组合构成多级放大电路。通过控制VCA821的增益电压控制端改变其输出增益，再经OPA695进一步放大等处理，可满足不同的增益需求。
\begin{figure}[!htbp]
    \centering
    \includegraphics[width=0.7\linewidth]{./fig/OPA695_use.png}
    \caption{OPA695基本电路}
    \label{fig.OPA695SCH}
\end{figure}
\begin{figure}[!htbp]
	\centering
	\includegraphics[width=0.9\linewidth]{./fig/OPA695.Oscilloscope_display.png}
	\caption{OPA695示波器显示}
	\label{fig.OPA695.Od}
\end{figure}      
\begin{figure}[htbp]
	 \centering
	 \includegraphics[width=0.9\linewidth]{./fig/OPA695.BW.png}
	 \caption{OPA695带宽}
	 \label{fig.OPA695.BW}
\end{figure}
当输入峰峰值为0.2V的信号时，由示波器显示可以看出OPA695正常工作，将输入信号放大8倍左右,各个板子的具体放大倍数仍需要实际测量来确定最终的放大倍数。放大器的带宽通常定义为增益下降3dB时的频率，由频谱仪测量可知目前实验室OPA695所能达到的实际带宽约为100MHz左右。
\subsection{OPA695构成宽带放大器电路}
OPA695是一种宽带运算放大器，具有高通频率和低失真的特点，在宽频带范围内可提供较大的增益和带宽，适用于高速信号处理和数据传输等应用。OPA695是电流反馈型运算放大器，输入级将输入电压信号转换为输入电流信号，利用内部电流镜等结构将输入电流传递到输出级，输出级再将电流信号转换为输出电压信号，实现信号放大。其高带宽特性得益于内部结构和电路设计，能在较宽频率范围保持良好放大性能.
\subsection{元件参数选择}
R1（50Ω）和R4（50Ω）：根据OPA695数据手册用于匹配输入信号源的阻抗，起到阻抗匹配的作用，确保信号源和负载之间的阻抗匹配，减少信号反射，提高信号传输的效率和质量。R2（56Ω）和R3（402Ω）：决定了电路的放大倍数，放大倍数如图\ref{fig.OPA695SCH}中所示。C1（10nF）：与R2配合，对频率信号起到滤波，信号耦合作用，可以滤掉电源里的偶次谐波。C2（100nF）和C3（100nF）：在IC（运算放大器）供电旁边，起到电源输入的类似电池泵的作用，同时也有低频滤波的效果，稳定电源电压，减少电源波动对运算放大器的影响。C2和C3分别靠近运算放大器的正、负电源引脚，用于滤除电源线上的高频噪声，保证电源的稳定性，使运算放大器能稳定工作。C5（6.8uF）和C6（6.8uF）：容量较大，主要用于低频滤波，进一步稳定电源，去除电源中的低频噪声。C7（100nF）和C8（100nF）：起到信号耦合的作用，允许交流信号通过，隔离直流成分，实现信号的传输。避免直流对后续电路产生影响，同时保证交流信号能够顺利进入运算放大器。
\section{宽带电压反馈运算放大器OPA690}
OPA690 是一款高性能电压反馈运算放大器，具有1900 V/$\mu s$的超高压摆率、低输入电压噪声4.6nV/√Hz、高输出电流215mA等优点,适合高精度、高动态范围的信号放大。它在高增益应用中表现优异，常用于中频（IF）信号链的滤波器缓冲或通信系统的低失真功率放大。在G = 1V/V时，其带宽可达535MHz，是视频处理、射频放大和高分辨率 RGB 驱动的理想选择，同时也适用于高速数据采集和测试测量设备。

作为一款禁用型的放大器，OPA690具有6.1mA的低静态电流，因此是便携式或电池供电型应用的理想选择。使用可选的禁用控制引脚 (DIS) 可以进一步降低系统功耗。DIS 保持断开或DIS保持高电平时将正常运行 OPA690。如果DIS 被拉至低电平，OPA690 电源电流会降至 100µA 以下，同时输出进入高阻抗状态。
\subsection{OPA690基本原理和典型电路}
\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.9\linewidth]{./fig/OPA690_use.png}
    \caption{OPA690加大加偏电路}
    \label{fig.OPA690_use}
\end{figure}
当输入100mV的正弦波时，可以看出OPA690实际放大三十多倍，通过修改{Rf}的值，可以调整放大倍数，来实现自身的需求。
\begin{figure}[htbp]
	\centering
	\includegraphics[width=0.9\linewidth]{./fig/OPA690.Oscilloscope_display.png}
	\caption{OPA690示波器显示}
	\label{fig.OPA690.Od}
\end{figure}
OPA690的输入级采用差分输入结构，提供高输入阻抗和低噪声性能，适合高速信号处理。增益部分采用反馈技术，确保在高频下仍能保持高带宽和快速响应，适合宽带应用。输出级设计为低输出阻抗，能够驱动较大负载，同时保持信号的完整性。内部集成了偏置和补偿电路，确保放大器在不同工作条件下的稳定性和线性度。信号通过输入端进入OPA690，通过外部反馈网络（如电阻和电容）来设置放大器的增益。增益的大小取决于反馈网络的阻抗比。输入信号在OPA690内部被放大。放大倍数由增益设置决定。放大后的信号从输出端输出。输出信号的大小和波形取决于输入信号、增益设置以及OPA690自身的性能。
\subsection{OPA690构成的四路反相加法电路}
OPA690作为一款高速、宽带电压反馈运算放大器，其构成的加法器电路能够对多个输入信号进行加法运算，输出这些信号之和，同时进行放大。在同一输入端增加若干输入电路，构成加法运算电路。加法电路有同相输入和反向输入两种，这里的四路反向加法电路则是一种基于运算放大器的电路，用于将多个输入信号按比例相加并反相输出。根据运算放大器的虚短、虚断特性和基尔霍夫电压定律，我们可以推出输出电压和每一路的增益公式
\begin{equation}
    V_{OUT} = -R_{f} \left( \frac{V_1}{R_1} + \frac{V_2}{R_2} + \frac{V_3}{R_3} + \frac{V_4}{R_4} \right)
    \label{equ.OPA690.basic}
\end{equation}
\begin{equation}
    G_{x} = -\frac{R_{f}}{R_{x}}
    \label{equ.OPA690.Gain}
\end{equation}
\begin{figure}[htbp]
        \centering
        \includegraphics[width=0.9\linewidth]{./fig/OPA690.adder.png}
        \caption{OPA690四路反相加法器}
        \label{fig.OPA690.adder}
    \end{figure}
四路输入信号为 \( V_1, V_2, V_3, V_4 \)。各路输入信号的电阻为 \( R_1, R_2, R_3, R_4 \)。
\subsection{元件参数选择}
 对于±5V的双电源操作，使用了较大的去耦电容C6 C7(10uF)C5 C8(0.1uF)分别进行并联以更好地滤除超高频噪声。同时在输入端分别串联滤波效果较好的退耦电容（0.1uF）进行滤波。由公式\ref{equ.OPA690.Gain}可知\(\frac{R_f}{R_x}\)\((x=1,2,3,4)\)可以确定每一路的放大倍数。R3和C2构成RC电路，对输入信号进行滤波。R8在输出端接地可以降低输出阻抗，抑制高频噪声。电源模块部分添加二极管，利用其单向导电性保护电路。

\section{集成锁相环ADF4351}
ADF4351是一款集成了压控振荡器（VCO）的锁相环芯片，在历次竞赛中，我实验室均使用此芯片完成调频信号的调制、解调任务。ADF4351结合外部环路滤波器和外部基准频率使用时，可实现小数N分频或整数N分频锁相环(PLL)频率合成器。ADF4351中集成的电压控制振荡器(VCO)，其基波输出频率范围为2200MHz至4400MHz。此外，利用1/2/4/8/16/32/64分频电路，用户可以产生低至35 MHz的RF输出频率。对于要求隔离的应用，RF输出级可以实现静音。静音功能既可以通过引脚控制，也可以通过软件控制。同时提供辅助RF输出，且不用时可以关断。所有片内寄存器均通过简单的三线式接口进行控制。该器件采用3.0V至3.6V电源供电，不用时可以关断。

\subsection{电路结构}
N分频器：ADF4351的N分频器主要用于在VCO输出的频率后进行精确分频后与$f_{PFD}$在 相位频率检测器（PFD）中进行比较，PFD输出UP/DOWN脉冲信号到电泵（CP），然后CP会将脉冲信号转换为电流信号，进入到环路滤波器（LPF）中滤除掉其中的高频噪声，从而生成平滑的控制电压，该控制电压用于控制VCO输出频率的大小从而实现闭环控制。其中N分频器的分频有整数模式与分数模式两种，N的值的计算如下：
\begin{equation}
	N=[INT + (FRAC/MOD)]
\end{equation}
其中INT是整数分频因子。FRAC是小数分频的分子（0至MOD$-$1）。MOD是预设的小数模数（2至4095）。通过不断修正$N$的值，从而追踪并锁定目标信号。

输出级（OUTPUT STAGE）：ADF4351的输出级提供了一个RF分频器用于将$f_{\text{VCO}}$进行分频，从而进一步扩展输出频率的范围，可选的分频比（RFDIV）为1，2，4，8，16，32，64。$f_{\text{OUT}}$的输出计算为
\begin{equation}
	f_{OUT}=f_{VCO}/RFDIV
\end{equation}
ADF4351还提供了差分输出驱动，提供了差分对（RFOUTA和RFOUTB）,需要通过外部的巴伦或者变压器去转换为单端信号。

下面是对该结构的详细解释：ADF4351有$RF_{\text{OUT}}A+$,$RF_{\text{OUT}}A-$,$RF_{\text{OUT}}B+$,$RF_{\text{OUT}}B-$四个引脚，
其中$RF_{\text{OUT}}A+$与$RF_{\text{OUT}}A-$是一对差分输出端口，他们在芯片内部连接到由VCO的缓冲输出驱动的NPN差分对的集电极，用于提供VCO的主要输出信号，如图2.13所示。
\begin{figure}[htbp]
	\centering
	\includegraphics[width=8cm]{./pdf/OUTPUT_STAGE.pdf}
	\caption{输出级（OUTPUT）}
	\label{datasheet_ADF4351_output}
\end{figure}
而$RF_{\text{OUT}}B+$与$RF_{\text{OUT}}B-$也是一对差分输出端口，但提供的是辅助RF输出。每一对差分输出端口之间的差异只有相位相差了180度，它们之间的幅度完全相等，这样的方式有助于减少噪声干扰，提高信号质量。

为了优化ADF4351的输出，需要进行输出匹配，从而达到更好的输出级，下面介绍输出匹配的相关知识点。匹配ADF4351输出的方法有很多种，最基本的方法就是将一个50欧姆电阻连接到$V_{\text{VCO}}$，然后再串联一个100pF的支流旁路电容。该电阻与频率无关，因此可以提供良好的宽带匹配性能。
连接50欧姆负载时，此电路的差分输出功率通常与寄存器4中的位[DB4:DB3]所设置的值相等，简易基本输出级如图2.14所示。（这里把负载设置为50欧姆是因为SMA接口的阻抗接近50欧姆，故使用50欧姆的负载来模拟SMA接口）。
\begin{figure}[htbp]
	\centering
	\includegraphics[width=8cm]{./pdf/Easy_OUTPUT.pdf}
	\caption{简易输出级}
	\label{datasheet_ADF4351_easy_output}
\end{figure}

输出匹配更好的方法是将一个3.9nF分流电感（充当RF扼流圈）连接到$V_{\text{VCO}}$，因为电感在高频下具有高阻抗特性，可以有效地阻止高频信号通过，同时允许直流偏置电压通过。这不仅提高了匹配性能，还减少了信号传输过程中的损耗，从而提高了输出功率,具体结构如图2.15所示。
\begin{figure}[htbp]
	\centering
	\includegraphics[width=8cm]{./pdf/Best_OUTPUT.pdf}
	\caption{最佳输出级}
	\label{datasheet_ADF4351_best_output}
\end{figure}
实验表明，对于W-CDMA UMTS频段1(2110 MHz至2170 MHz)，图2.15所示电路可提供出色的50 Ω匹配。这种情况下，最大输出功率约为5 dBm。

如果不需要差分输出，则不用的输出可以端接起来，或者利用巴伦将两路输出合并。利用分立电感和电容可以实现如图2.16所示的巴伦结构，元件L1和C1构成LC巴伦，L2为$RF_{\text{OUT}}A_{\text{-}}$提供直流路径，电容C2用于隔直。
\begin{figure}[htbp]
	\centering
	\includegraphics[width=8cm]{./pdf/LC_Barun.pdf}
	\caption{用于ADF4351的LC巴伦}
	\label{datasheet_ADF4351_barun}
\end{figure}
此外LC巴伦电路的各个元件的值可以根据对应频率在图2.17所示的表格中所对应的元件值进行更改。
\begin{figure}[htbp]
	\centering
	\includegraphics[width=16cm]{./pdf/LC_Barun_Component.pdf}
	\caption{LC巴伦组成元件}
	\label{datasheet_ADF4351_barun_component}
\end{figure}
此外通过操作寄存器，还可以实现控制输出级的输出功率，范围为：-4 dBm,-1 dBm,+2 dBm,+5 dBm。
ADF4351还提供了输出静音功能，可以选择是否在成功锁定前静音输出。

寄存器：ADF4351拥有6个32位寄存器用于配置，其中每个寄存器的最低三位为控制位，用以确定配置数据到特定的寄存器，下面将介绍这6个寄存器的主要特点以及配置方法

寄存器0：当控制位为000时，可对该寄存器进行编程，其中[DB30:DB15]用于设置N分频器中的INT参量，对于4/5预分频器，可以设置23到65,535的整数值；对于8/9预分频器，最小整数值为75。
位[DB14:DB3]用于配置N分频器中的FRAC参量，范围为从0到（MOD-1）,它所涵盖的通道频率范围与PFD基准频率相同。

寄存器1：当控制位为001时，可对该寄存器进行编程，位DB28决定是否允许对给定输出频率的输出相位进行调整。当它设为1时，器件在寄存器0更新时不执行VCO频段选择或相位再同步，否则会执行VCO频段选择或相位再同步（前提要满足寄存器3中相位再同步位[DB16:DB15]使能），建议不要禁用，除非是固定频率应用或相对于原始选择频率的偏差小于
1 MHz。位DB27与预分频器值有关，简单来说，当预分频器设置为4/5时，容许的最大RF频率为3.6 GHz。因此，当ADF4351的工作频率超过3.6 GHz时，必须将预分频器设置为8/9。当DB27置0时，预分频器的值为4/5，当DB27置1时，预分频器的值为8/9。预分频器的值会影响INT整数分频参数的最小值，当预分频器值为4/5时，INT的最小值为23；当预分频器的值为8/9时，INT的最小值为75.
位[DB26:DB15]控制相位字，相位字必须小于寄存器1中设置的MOD值。相位字用来设置RF输出相位，从0°到360°，分辨率为360°/MOD，如果相位再同步和杂散优化功能均不使用，建议将相位字设置为1。
位[DB14:DB3]用于设置小数模数，数，即PFD频率与RF输出端通道步进分辨率的比值，大小为从2到4095。

寄存器2：当控制位为010时，可对该寄存器进行编程，位[DB30:DB29]设置为00时，代表ADF4351进入了低噪声模式，此模式下会会确保电荷泵工作在使噪声性能最佳的区域。当环路滤波器带宽较窄时，低噪声模式非常有用。频率合成器会确保噪声极低，滤波器则会衰减杂散。
当位[DB30:DB29]设置为11时，代表ADF4351进入了低杂散模式（这是一种通过优化内部设置来降低输出信号中杂散信号电平的工作模式。杂散信号是指在频率合成器输出信号中，除了主频信号外的其他不需要的信号成分，这些信号可能会对系统的性能产生干扰），从而使能扰动，扰动会将使小数量化噪声随机化，使其类似于白色噪声，而不是杂散噪声。因此，器件的杂散性能便得以改善。对于PLL闭环带宽较宽的快速
锁定应用，一般使用低杂散模式。宽环路带宽是指大于$RF_{\text{OUT}}$通道步进分辨率（$f_{\text{RES}}$）1/10的环路宽带，宽环路滤波器无法将杂散衰减到与窄环路带宽相同的水平。
片内多路复用器的输出由位[DB28:DB26]控制。注意，为使VCO频段选择正常工作，必须禁用N分频器输出。
位DB25置1时代表参考频率倍频器使能，会将参考频率翻倍后输入R分频器中，注意，倍频器使能时，最大容许的$f_{\text{REF}}为30Mhz$。
当DB24设置为1时，R分频器与PFD之间会插入一个二分频触发器，将频率减少一半。此功能使得PFD输入端信号占空比为0.5，这对于减少周跳是必要的。
位[DB23:DB14]用于控制10位R分频器，可以细分输入参考频率以产生PFD的参考时钟。分频比可以为1至1023。
位DB13使能或禁用对寄存器4中的位[DB22:DB20]的双缓冲。
位[DB12:DB9]用于设置电荷泵的电流。应将电荷泵电流设置为环路滤波器的设计电流。
位DB8配置锁定检测功能(LDF)。LDF控制PFD周期数，锁定检测电路监视该周期数以确定是否实现锁定。DB8设为0时，监视的PFD周期数为40。DB8设为1时，监视的PFD周期数为5。对于小数N分频模式，建议将DB8位设为0；对于整数N分频模式，建议将其设为1。
位DB7用于设置锁定检测电路的比较窗口，简单来说，当您使用小数分频时，推荐位[DB8:DB7]设置为00，使用整数分频时，则设置为11。
DB6位设置鉴相器极性。如果使用无源环路滤波器或同相有源环路滤波器，则应将此位设置为1。如果使用反相有源滤波器，则应将此位设置为0。
位DB5用于设置关断（PD），为1时，执行关断程序，为0时，频率合成器恢复正常工作，在软件关断模式下，器件会保留寄存器中的所有信息。只有当切断电源时，寄存器内容才会丢失。当关断被激活时，会发生以下事件：强制频率合成器的分频器进入加载状态，VCO关断，强制电荷泵进入三态模式，数字锁定检测电路复位，$RF_{\text{OUT}}$缓冲器禁用，输入寄存器保持活动状态，能够加载并锁存数据。
DB4位设置为1时，电荷泵进入三态模式。正常工作时，应将此位设置为0。
DB3位是ADF4351的R分频器和N分频器的reset位。当此位设为1时，RF频率合成器N分频器和R分频器处于复位状态。正常工作时，此位应设置为0。

寄存器3：当控制位为011时，可对该寄存器进行编程，DB23位设为1时，选择较快的频段选择逻辑序列（注意此时，频段选择时钟分频器的值必须小于或等于254），这种设置适合高PFD频率，对于快速锁定应用是必要的。对于低PFD (<125 kHz)值，建议将DB23位设为0。
位DB22用于设置PFD防反冲脉冲宽度，建议小数N分频时设置该位为0，整数时设置为1，，可改善整数N分频操作的相位噪声和杂散性能。
DB21位设为1将使能电荷泵电荷消除功能，这可以降低整数N分频模式下的PFD杂散。在小数N分频模式下，此位应设置为0。
DB18位设置为1将使能周跳减少(CSR)功能。利用此功能可缩短锁定时间。请注意，为使周跳减少有效，鉴频鉴相器(PFD)的信号必须有0.5的占空比。电荷泵电流设置也必须设置为最小值。
位[DB16:DB15]用于设置时钟分频器模式，设置为10时，将激活相位再同步，设置为01时，将激活快速锁定，设置为00时将禁用时钟分频器。
位[DB14:DB3]设置12位时钟分频器值。此值是激活相位再同步和设置快速锁定的超时计数器。

寄存器4：当控制位为100时，可对该寄存器进行编程，DB23位选择从VCO输出到N计数器的反馈。为1时，信号从VCO直接获得，为0时，信号从输出分频器的输出端获得，当分频器使能且反馈信号从其输出获得时，两个独立配置PLL的RF输出信号同相。这在需要对信号进行正干涉以提高功率的一些应用中很有用。
位[DB22:DB20]选择RF输出分频器的值，值的大小（十进制）与分频值成2的幂次方关系，这里不过多赘述。
位[DB19:DB12]设置频段选择逻辑时钟输入的分频器。R分频器的输出默认用作频段选择逻辑时钟，但如果此值太大(>125 kHz)，则可以启用一个分频器，以将R分频器输出细分为较小的值。
位DB11为0时，VCO上电；否则VCO关断。
DB10位设置为1，则切断RF输出级的电源电流，直到数字锁定检测电路检测到器件实现锁定为止。
DB9位设置辅助RF输出。DB9设为0时，辅助RF输出为RF分频器的输出；DB9设为1时，辅助RF输出为VCO基频。
DB8位使能或禁用辅助RF输出。DB8设为0时，辅助RF输出禁用；DB8设为1时，辅助RF输出使能。
位[DB7:DB6]用于设置辅助RF输出功率水平的值，设置为00时，功率为–4dBm；设置为01时，功率为–1dBm；设置为10时，功率为 +2dBm；设置为11时，功率为 +5dBm。
DB5位使能或禁用主RF输出。DB5设为0时，主RF输出禁用；DB5设为1时，主RF输出使能。
位[DB4:DB3]设置主RF输出功率水平的值，其功率水平大小与值的对应关系与上述的辅助输出完全一致。

寄存器5：当控制位为101时，可对该寄存器进行编程，位[DB23:DB22]设置锁定检测(LD)引脚的工作方式，当设置为01时，开启了数字锁定检测。

\subsection{元件参数选择}
\subsection{程序控制方法}
下面用RF合成器为例，依据公式(\ref{equ:4351-example})对ADF4351合成器进行编程：
\begin{equation}
	RF_{OUT} = [INT + (FRAC/MOD)] \times (f_{PFD}/RF \space Divider)
	\label{equ:4351-example}
\end{equation}
其中，$RF_{OUT}$是RF频率输出。RF Divider是将VCO频率分频的输出分频器。
\begin{equation}
	f_{PFD}=REF_{in}\times((1+D)/(R\times(1+T)))
	\label{equ:vco_freq}
\end{equation}
其中，$REF_{IN}$为参考频率输入。
D是$REF_{IN}$倍频器位（0或1）。
R为射频参考分频因子（1$\sim$1023）。
T是参考值除以2位（0或1）。

例如，UMTS（Universal Mobile Telecommunications System，通用移动通信系统，第三代移动通信技术即3G技术的统称）系统需要2112.6 MHz射频频率输出（$REF_{OUT}$）；10 MHz参考频率输入（$REF_{IN}$）可用，RF输出需要200 kHz通道分辨率（$f_{RESOUT}$）。
请注意，ADF4351 VCO的工作频率范围为2.2GHz至4.4GHz。因此，RF Divider的值应为2（VCO频率= 4225.2 MHz, $RF_{OUT}$ = VCO频率/ RF Divider= 4225.2 MHz/2 = 2112.6 MHz）。回路的闭合位置也很重要。在本例中，环路在输出分频器之前关闭，如图\ref{ADF4351_Loop}。
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.5]{./fig/ADF4351_Loop.png}
	\caption{ADF4351环路图}
	\label{ADF4351_Loop}
\end{figure}
在RF Divider的输出端需要200kHz的通道分辨率（$f_{RESOUT}$）。因此，在VCO（$f_{RES}$）的输出通道分辨率需要为$2\times f_{RESOUT}$，即400khz。

\begin{align}
	MOD=REF_{IN}/f_{RES} \\
	MOD=10 MHz/400kHz = 25
\end{align}
从式\ref{equ:vco_freq}可知
\begin{align}
	f_{PFD}=(10MHz \times (1+0)/1)=10MHz\label{1}	\\
	2112.6MHz=10MHz \times ((INT+(FRAC/25))2)\label{2}
\end{align}
计算可得INT=422，FRAC=13。

ADF4351通过SPI与单片机进行通信，这里也可以采用模拟SPI进行通信。ADF4351的主要控制引脚包括：

\begin{enumerate}
	\item CLK：SPI时钟输入
	\item DATA：SPI数据输入
	\item LE：锁存使能（LE）
	\item CE：芯片使能（CE）
	\item MUXOUT：多路复用输出（可用于锁相检测等）
\end{enumerate}

将这些引脚连接至对应的单片机GPIO口，STM32H743的SPI接口需要配置为以下参数：

\begin{enumerate}
	\item SPI模式0（CPOL = 0，CPHA = 0）
	\item 8位数据大小（ADF4351的寄存器是32位的，因此需要传输4次）
	\item 时钟频率：根据ADF4351的时序要求，选择合适的时钟频率（通常不超过20 MHz）
\end{enumerate}

寄存器的写入方面，ADF4351有6个32位寄存器（R0-R5），用于配置芯片的各种参数。每个寄存器的写入需要通过SPI接口发送32位数据。在给寄存器写入数据之前，首先将LE引脚拉低，然后分四次向寄存器写入数据
\begin{verbatim}
	HAL_SPI_Transmit(&hspi, txData, 4, HAL_MAX_DELAY);
\end{verbatim}
，最后将LE引脚拉高。

初始化ADF4351,需要在芯片上电后按照从R5到R0的顺序依次对寄存器进行初始化，每个寄存器的配置取决于您的应用需求（如输出频率、参考频率、PFD频率等）。设置输出频率可以根据上文对INT,FRAC，MOD等值的计算然后将这些数据写入对应的寄存器

ADF4351的MUXOUT引脚可以配置为输出锁相检测信号。您可以通过读取MUXOUT引脚的状态来判断PLL是否锁定,可以使用该函数
\begin{verbatim}
	HAL_GPIO_ReadPin();
\end{verbatim}
去读取MUXOUT引脚对应的GPIO的电平高低去判断，当MUXOUT电平高时，说明PLL已经锁定了。

\section{宽带衰减器PE4302}

衰减器是一种提供衰减的电子元器件， 广泛地应用于电子设备中，它的主要用途是调整电路中信号的大小，改善阻抗匹配，能够缓冲阻抗的变化 。
\subsection{PE4302电路原理}
PE4302 是一款高线性度、6 位 RF 数字步进衰减器(DSA) 以 0.5 dB 的步长覆盖 31.5 dB 的衰减范围。这款 50 欧姆 RF DSA 提供并行和串行CMOS控制接口使用单个 3 V 电源工作,其次最大输入射频信号幅度为24dBm。在整个频率范围内保持高衰减精度(1 GHz 时(0.10 + 1\% x 衰减设置)(0.15 + 2\% x 衰减设置)2.2 GHz4 GHz 时(0.15 + 8\% x 衰减设置))。
\begin{figure}[htbp]
	\centering
	\includegraphics[width=6cm]{./fig/PE4302pin.png}
	\caption{PE4302引脚配置图}
	%%Pin Configuration
	\label{PE4302.1}
\end{figure}
\subsection{参数设计}
P/S是芯片的串并行控制端,接高电平为串行控制,接低电平为并行控制。LE是芯片的使能端,接高电平芯片使能,可以实现不同的衰减。
\begin{itemize}
\item 并行控制：在P/S置低,LE置高时,C0.5-C16的并行控制口的衰减量是叠加的,(c0.5、c1、c2、c4、c8和c16代表了不同的衰减级别，通常用于选择器的开关配置。这些配置通过控制电路中的开关（数字信号0或1）来改变衰减器的衰减量，图中值为1代表将该控制位置上电。)
可按0.5dB增减,(此时PUP1和PUP2不起作用，PUP指的是“Power Up”状态，它控制电路是否处于启用状态。PUP的状态（0或1）与其他控制信号（P/S和LE）一起决定了衰减器的工作模式和最终的衰减水平。)。
例如需要11dB衰减,则需要将C1,C2,C8对应的开关置高电平($C1+C2+C8=11dB$)如图\ref{PE4302.2}。\\
在P/S置低,LE置低时,并行控制口的衰减量可被设置为如图\ref{PE4302.3}四种衰减量之一从而实现不同的衰减。
\begin{figure}[htbp]
	\centering
	\includegraphics[width=9cm]{./fig/PE4302c value.png}
	\caption{C 真值表}
	\label{PE4302.2}
\end{figure}
\begin{figure}[h]
	\centering
	\includegraphics[width=8cm]{./fig/PE4302 pupvalue.png}
	\caption{并行PUP真值表}
	\label{PE4302.3}
\end{figure}

\item 串行控制:当P/S置高,LE置高的时候,芯片处于串行工作模式。\\
串行接口由失能锁存器缓冲的6位串行输入，并行输出移位寄存器。由三个COMS兼容信号控制:Data、Clock、LE，其中Data和Clock将数据串行地输入移位寄存器，此过程与LE无关。
PE4302通过SPI(Serial Peripheral Interface)协议进行配置和控制。6个控制位对应的寄存器及其时序图如图\ref{PE4302.5}，通过串行输入(控制)信号，可以设置开关的状态（开启或关闭）。
PE4302 的状态信息通常会通过串行接口反馈给控制器，这样可以在系统中实时监测开关的操作状态.
提供两种SPI方案通信:SPI通信和SPI模拟其中模拟通信方案较简单，最初编写时需要：根据 PE4302 的数据手册确认时序要求。
添加适当的延时。验证硬件连接和信号时序。
\\STM32 SPI串行控制参考项目示例地址:\cite{PE4302SPISTM32ctrol}
\\STM32模拟通信代码:\ref{PE4302.6}和\ref{PE4302.7}。竞赛历年代码-23D-PE4302
\begin{figure}[htbp]
	\centering
	\includegraphics[width=13cm]{./fig/4302SPIimitate3.png}
	\caption{模拟4302SPI通信函数.c}
	\label{PE4302.6}
\end{figure}
\begin{figure}[htbp]
	\centering
	\includegraphics[width=12cm]{./fig/4302SPIimitate4.png}
	\caption{模拟4302SPI通信函数.h}
	\label{PE4302.7}
\end{figure}
\\代码说明如图示中讲解，最初编写时需要配合串行控制时序图\ref{PE4302.5}来写。

\subsubsection{参数范围}
\item 正常模式 :$ VDD=3.3V(2.3V \sim 5.5V),VSS\_EXT=0V,IDDMax=200uA$，\\即将VSS\_EXT/GND连接到GND,以启用内部负电压发生器。\\
\item 旁路模式 :$ VDD=3.3V(2.7V \sim 5.5V),VSS\_EXT=-3.3V(-3.6V \sim -3.2V),IDDMax=80uA,ISSMin=-40uA$
\\即向VSS\_EXT/GND施加一个负电压,旁路并禁用内部负电压发生器。\\(在旁路模式下,PE4302 将信号直接传递到输出，而不经过其内部的 RF 开关。这种模式通常是在不需要进行开关操作时使用。)
\\注:RF 引脚RF1和 RF2 必须为 0 Vdc。如果满足 0 Vdc 要求，RF引脚不需要DC隔直电容即可正常工作。

绝对最大额定值：电源电压$VDD_{Min}$=-0.3v, VDDMax=5.5v, 数字输入电压VctrlMin=-0.3v,VctrlMax=3.6v.最大输入功率为+30dBm	
\subsubsection{衰减改变}
LE状态控制芯片衰减状态的锁存。当LE置低电平时，芯片处于锁存状态，此时并行串行输入新的衰减数据不会改变芯片的衰减量。
\\串行编程和并行锁存编程在更改衰减时LE应先保持低电平(锁存状态),
防止芯片衰减量在衰减数据输入时被更改，随后LE状态应切换为高电平锁存新的衰减数据，
并再次变为低电平。
而直接并行编程:LE保持高电平，改变衰减数据将直接改变芯片衰减量。

\iffalse 
\begin{figure}[h]
	\centering
	\includegraphics[width=9cm]{./fig/PE4302function.png}
	\caption{PE4302 功能示意图}
	\label{PE4302.4}
\end{figure}
\fi

\begin{figure}[htbp]
	\centering
	\includegraphics[width=15cm]{./fig/PE4302serial Register map.png}
	\caption{串行接口时序图及其6位寄存器映射}
	\label{PE4302.5}
\end{figure}
\end{itemize}		

\subsection{原理图分析}
PE4302整体原理图如下：
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.1]{pdf/PE4312_sch.pdf}
	\caption{PE4302原理图}
	\label{PE4312(4302)sch}
\end{figure}
电路主要由电源与指示灯部分、开关部分、上电衰减量选择部分(手册原文为Power-up Control Settings,翻译不当可更改)、串行控制部分以及输入输出部分组成。其中电源与指示灯部分不再赘述。
\subsubsection{开关部分}
开关部分主要通过对芯片各引脚输入高、低电压来实现芯片串、并行模式的选择以及并行模式下衰减量的控制。
如图所示，R8、R9为接地电阻，确保开关断开为低电平，闭合为高电平。开关从左到右依次控制C0.5、C1、C2、C4、C8、C16、P/S以及LE引脚。其中，C0.5-C16开关控制并行模式下的衰减量，P/S开关控制串并行模式，LE开关为使能开关，接高电平芯片使能。
在并行模式下（即P/S开关断开，LE开关闭合）,通过控制C0.5-C16开关即可选择衰减量。
\subsubsection{上电衰减量选择部分}
上电衰减量选择是PE4302芯片的一大特点，且在串、并行模式下都可以通过对应部分实现。
该部分为并行模式下的上电衰减量控制接口。在P/S、LE同时置0时，通过PUP1、PUP2接口的高低电平实现对上电衰减量的选择。
\subsubsection{串行控制部分}
串行控制部分主要包含一个串行接口，分别与芯片的Data、Clock、LE引脚连接。将此接口与MCU相连,从而达到通过MCU控制衰减量的目的。
同时，串行模式下的上电衰减量也通过该接口设置。其值为Data引脚输入的6位并行数据。
\subsubsection{输入输出部分}
通过SMA接口实现信号的输入与输出，并用电容进行隔直。

\section{包络检波器ADL5511}
ADL5511在竞赛中常用于调幅信号包络检波，该芯片非常昂贵。实验室在2021年初期训练中，一直采用外购方式满足所需。ADL5511是一款RF包络和TruPwr均方根检波器。包络输出电压是一个与输入信号的包络成正比的电压。均方根输出是一个线性V/V输出电压，与输入信号的峰均比无关，900 MHz时的转换增益为1.9 V/V均方根值。包络输出的转换增益为1.46 V/V（900MHz），它以EREF引脚提供的1.1 V内部基准电压为参考。


ADL5511可采用直流至6 GHz信号工作，包络带宽最高可达130 MHZ。所获取的包络可以用于PA线性化和提高效率，均方根输出则可以用于测量均方根功率。它特别适用于宽带、高峰均比信号的包络检波。
\subsection{ADL5511基本原理}
ADL5511 的芯片框图如图 \ref {fig:ADL5511-basic} 所示。ADL5511 需要 5 V单电源供电。电源连接到正电源引脚（VPOS）。使用两个容量分别为0.1 uF和100 pF的电容器对此引脚进行去耦处理。一个75 Ω的外部电阻与射频输入引脚（RFIN）相连，以实现 50 Ω的宽带匹配。包络输出可从包络输出引脚 （VENV）获取，以参考电压引脚（EREF）上的 1.1 V直流电压为参考。（即任何时刻的真包络为(VENV − VEREF)，但这两个引脚不构成差分输出。EREF是固定直流电压，VENV携带所有包络信息。）均方根输出电压可在均方根电压引脚（VRMS）获取。
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.4]{./fig/ADL5511-basic.png}
	\caption{ADL5511芯片框图}
	\label{fig:ADL5511-basic}
\end{figure}
\subsubsection{关于芯片电容的作用与参数选取}

4个FLT引脚连接的电容起滤波作用。FLT1引脚连接的电容用于减少射频输入引脚（RFIN）残余的载波。其中C6与C10处初始为开路，当 FLT2 和 FLT3 引脚未连接时，两个内部低通滤波器会从包络信号中去除（频率为原始输入频率两倍的）残余射频载波，这两个滤波器的截止频率分别约为 1000MHz 和 800MHz。连接到 FLT2 和 FLT3 的参考电容可用于降低该截止频率。

\subsubsection{在1 GHz以下频率工作/包络滤波}
要在1 GHz以下频率使用ADL5511，FLT3、FLT2和FLT1引脚上必须增加若干外部电容，此外还要选择适当的RMS均值电容。下面将会一一列举参数设定的方法。

作为内部信号处理算法的一部分，RF输入信号经过一个由10 kΩ电阻和5 pF电容组成的低通滤波器。这相当于大约3.2 MHz的转折频率。如果载波频率低于此值的大约10倍(32 MHz)，则必须降低该转折频率。内部5 pF电容可通过将一个以地为基准的电容连接到引脚3 (FLT1)来增加。外部电容的值可通过下式来设置：
\[C_{FLT1}= \frac{1}{(2\pi\times f_{3dB}\times10{,}000\Omega)}- 5\mathrm{pF}\]
例如，若FLT1上有一个100 pF电容，则转折频率降至150 kHz。作为一般原则，该转折频率至少应设置为最小预期载波频率的十分之一，从而确保目标频率周围的频率响应是平坦的。ADL5511的包络检波路径内置载波抑制低通滤波。$F_{LT2}$和$F_{LT3}$引脚未连接时，两个内部1 GHz和800 MHz低通滤波器(串联工作)消除包络输出信号中的RF载波。这些滤波器的方程式如下：
\[\frac{1}{(2\pi\times0.4\mathrm{pF}\times400\Omega)}\cong1\mathrm{GHz}\]
以及 \[\frac{1}{(2\pi\times0.8\mathrm{pF}\times250\Omega)}\cong800\mathrm{MHz}\]
由于包络检波电路内置全波整流器，因此该滤波器首先必须抑制二倍原始输入频率的信号。对于900 MHz范围内的输入频率，包络输出中仍会有相当多的载波成分。两个滤波器在大约900 MHz时提供总共6 dB滚降，残余载波在1.8 GHz，预期可提供18 dB的载波滤波器(两个单极点滤波器提供总共12 dB/倍频程的滚降)。将以电源为基准的额外电容增加到FLT2和FLT3引脚，可增强包络检波路径的内部载波滤波。所需电容可通过下式计算：
\[C_{FLT2}=\frac{1}{(2\pi\times f_{FLT2}\times400\Omega)}-0.4\mathrm{pF}\]
以及 \[C_{FLT3}=\frac{1}{(2\pi\times f_{FLT3}\times250\Omega)}-0.8\mathrm{pF} \]
其中，$f_{LT2}$和$f_{LT3}$是所需的转折频率。例如，要设置200 MHz的转折频率，$C_{FLT2}$和$C_{FLT3}$应分别设置为1.6 pF和2.4 pF。两个转折频率应设置为大致相等。必须注意不要将该载波抑制滤波器的转折频率设置得过低，否则包络带宽将开始降低。ADL5511的包络带宽为130 MHz。如果FLT2和FLT3上的电容非常大，使得载波抑制转折频率接近130 MHz，载波滤波将直接影响包络带宽。因此，转折频率应设置得足够低，使得在充分消除包络输出中的RF载波的同时，仍能保持所需的包络带宽。另一个方案是使用更高阶滤波器在VENV输出端对载波进行滤波。
\subsubsection{选择RMS均值电容($C_{FLT4}$)值}
CFLT4提供内部RMS计算的均值功能，其结果在VRMS输出端提供。如上所述，片内RMS滤波转折频率由内部400 Ω电阻和20 pF电容设置，约为20 MHz。为实现充分RMS滤波，FLT4(引脚14)与VPOS(引脚15)之间应连接一个外部滤波电容。此电容作用于内部400 Ω电阻，为RMS滤波器产生新的转折频率，如下式所示：
\[C_{FLT4}=\frac{1}{(2\pi\times f_{FLT4}\times400\Omega)}-20\mathrm{pF}\]
例如，若在FLT4上添加一个以电源为基准的0.1 µF电容，RMS均值电路的转折频率将降至大约4 kHz。在一定程度上，RMS滤波电容的大小对RMS精度有直接影响。对于大多数高精度检波，RMS滤波器转折频率应足够低，以便滤除大部分调制内容。为此，转折频率应显著低于被测信号的带宽。

\subsection{二极管检波电路原理详述}

\subsubsection{峰值包络检波原理}
从高频已调信号中取出调制信号的过程被称作解调（或检波）。解调是调制的逆过程，调幅波的解调即振幅检波，简称检波。

二极管包络检波电路仅适用于普通调幅波的解调，其电路如图
\ref{fig:diode_envelope_detection1}
所示。在该电路中，\(D\)为检波元件，\(C\)和\(R\)构成低通滤波器。当输入的已调波信号幅值较大时，二极管\(D\)断续工作。输入信号正半周时，二极管导通，对电容\(C\)充电；信号负半周及输入电压较小时，二极管截止，电容\(C\)向\(R\)放电。在\(R\)两端得到的电压包含多种频率成分，经电容\(C\)滤除高频部分后，在输出端便可得到还原的低频信号。

为实现良好的解调效果，要求二极管导通时正向电阻\(r_{pos}\ll R\)，截止时反向电阻\(r_{neg}\to\infty\)。由\(RC\)组成的低通滤波器对输入高频信号中的载频呈现的阻抗\(Z(\omega_{s}) = 0\)，以确保对高频信号有良好的滤波能力；而对低频调制信号呈现的阻抗\(Z(\Omega)=R\)，从而保证较高的滤波效率。

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.5\textwidth]{./fig/diode_envelope_detection_circuit1.png}
    \caption{二极管包络检波电路}
    \label{fig:diode_envelope_detection1}
\end{figure}

\subsubsection{原理电路}
包络检波电路由输入回路、二极管\(VD\)、\(RC\)低通滤波器组成，如图\ref{fig:envelope_detection_circuit}所示。其中，\(VD\)起整流作用，\(C\)起高频滤波作用，\(R\)作为检波器的低频负载，在其两端输出恢复后的调制信号。

\(RC\)低通滤波电路具有两个作用：
\begin{enumerate}
    \item 对于低频调制信号\(u_{\Omega}\)，电容\(C\)的容抗很大，相当于开路，电阻\(R\)作为检波器的负载，其两端产生输出低频解调电压；
    \item 对于高频载波信号\(u_{\Omega}\)，电容\(C\)的容抗极小，相当于短路，起到对高频电流的旁路作用，即滤除高频信号。
\end{enumerate}

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.5\textwidth]{./fig/envelope_detection_circuit.png}
    \caption{包络检波电路}
    \label{fig:envelope_detection_circuit}
\end{figure}

\subsubsection{工作原理分析}
当输入信号\(u_{i}(t)\)为调幅波时，载波正半周二极管导通，输入高频电压经二极管对电容\(C\)充电，充电时间常数为\(r_{d}C\)。由于\(r_{d}C\)较小，充电迅速，电容上电压快速建立，输出电压\(u_{i}(t)\)也随之快速增长。

作用在二极管\(VD\)两端的电压为\(u_{i}(t)\)与\(u_{o}(t)\)之差，即\(u_{D}(t)=u_{i}-u_{o}\) ，因此二极管的导通与否取决于\(u_{D}\)：
当\(u_{D}(t)=u_{i}-u_{o}>0\)时，二极管导通；
当\(u_{D}(t)=u_{i}-u_{o}<0\)时，二极管截止。

\(u_{i}(t)\)达到峰值开始下降后，随着\(u_{i}(t)\)降低，当\(u_{i}(t)=u_{O}(t)\)，即\(u_{D}(t)=u_{i}-u_{o}=0\)时，二极管\(VD\)截止。此时\(C\)将导通期间储存的电荷通过\(R\)放电，由于放电时间常数\(RC\)较大，放电过程较为缓慢。

\begin{figure}[htbp]
    \centering
    % 第一个子图
    \begin{subfigure}{0.3\textwidth}
        \centering
        \includegraphics[width=\textwidth]{./fig/5511work1.png}
        \caption{二极管对电容C充电原理}
        \label{fig:5511work1}
    \end{subfigure}
    \hfill
    % 第二个子图
    \begin{subfigure}{0.3\textwidth}
        \centering
        \includegraphics[width=\textwidth]{./fig/5511work2.png}
        \caption{电容C放电原理}
        \label{fig:5511work2}
    \end{subfigure}
    % 整体图标题
    \caption{电容充放电原理示意图}
    \label{fig:combined}
\end{figure}


检波器的有用输出电压为：\(u_{o}(t)=u_{\Omega}(t)+U_{DC}\) 
检波器的实际输出电压为：\(u_{o}(t)+\Delta u_{c}=u_{\Omega}(t)+U_{DC}+\Delta u_{c}\) 
当电路元件选择恰当时，高频纹波电压\(\Delta u_{c}\)很小，可忽略不计。此时输出电压为：\(u_{o}(t)=u_{\Omega}(t)+U_{DC}\)，包含直流及低频调制分量。
其输出电压波形如图\ref{fig:wave1}
\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.5\textwidth]{./fig/5511wave1.png}
    \caption{包络检波器输出电压}
    \label{fig:wave1}
\end{figure}

\newpage
\subsubsection{峰值包络检波器的输出电路}
检波电路如图\ref{fig:peak_envelope_detection_output1}所示。电容\(C_{d}\)起到隔直作用，直流分量\(U_{DC}\)被隔离，输出信号为解调恢复后的原调制信号\(u_{\Omega}\)，该电路常作为接收机的检波电路。

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.5\textwidth]{./fig/peak_envelope_detection_output_circuit1.png}
    \caption{检波电路}
    \label{fig:peak_envelope_detection_output1}
\end{figure}

\subsubsection{检波器的惰性失真}
通常为提高检波效率和滤波效果（\(C\)越大，高频波纹越小），会选择较大的\(R\)、\(C\)值。但如果取值过大，使得\(R\)、\(C\)的放电时间常数对应的放电速度小于输入信号（\(AM\)）包络下降速度，会导致输出波形不随输入信号包络变化，从而产生失真。这种失真由电容放电的惰性引起，故称为惰性失真。
\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.5\textwidth]{./fig/peak_envelope_detection_output_circuit2.png}
    \caption{检波电路的惰性失真}
    \label{fig:peak_envelope_detection_output2}
\end{figure}

产生原因：负载电阻\(R\)与负载电容\(C\)的时间常数\(RC\)过大，致使电容\(C\)上的电荷无法快速跟随调幅波包络变化（电容\(C\)两端电压通过\(R\)放电速度太慢），即输入\(AM\)信号包络的变化率大于\(RC\)放电的速率。

改进措施：为避免产生惰性失真，在任何一个高频周期内，都需使电容\(C\)通过\(R\)放电的速度大于或等于包络下降速度。

避免产生惰性失真的条件：在任何时刻，电容\(C\)上电压的变化率应大于或等于包络信号的变化率，即：
\begin{equation}
\left|\frac{\partial u_{c}}{\partial t}\right| \geq\left|\frac{\partial U_{AM}(t)}{\partial t}\right|
\end{equation}
由此得出不失真条件：
\begin{equation}
RC \leq \frac{\sqrt{1 - m^{2}}}{\Omega m}
\end{equation}

\subsubsection{检波器的底部切割失真}
原因：通常为取出低频调制信号，检波器与后级低频放大器的连接方式如图\ref{fig:5511real1}所示。由图可知，\(R_{L}\)越小，\(U_{R}\)分压值越大，越容易产生底部切割失真；此外，\(m_{a}\)值越大，调幅波包络的振幅\(m_{a}U_{im}\)越大，调幅波包络的负峰值\(U_{im}(1 - m_{a})\)越小，也越容易引发底部切割失真。

改进措施：为防止这种失真，必须保证调幅波包络的负峰值\(U_{im}(1 - m_{a})\)大于直流电压\(U_{R}\)，即：
\begin{equation}
U_{im}(1 - m_{a}) \geq U_{R}
\end{equation}
避免底部切割失真的条件为：
\begin{equation}
m_{a} \leq \frac{R}{R + R_{L}}
\end{equation}

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.5\textwidth]{./fig/5511real1.png}
    \caption{包络检波应用型电路}
    \label{fig:5511real1}
\end{figure}
\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.5\textwidth]{./fig/5511real2.png}
    \caption{检波器的底部切割失真}
    \label{fig:5511real2}
\end{figure}


% 电路设计原理部分
\subsection{电路设计原理}
依据包络检波原理设计出的包络检波电路如图\ref{fig:design_circuit}所示。通过理想的乘法器和加法器，利用调制信号控制高频载波的幅度，使其随调制信号线性变化。在二极管包络检波电路中，二极管\(D1\)为检波元件，\(C\)和\(R\)构成低通滤波器。当输入的已调信号较大时，二极管\(D\)断续工作，输入信号正半周时导通，对电容\(C\)充电；信号负半周和输入电压较小时截止，电容\(C\)对\(R\)放电。在\(R\)两端得到的电压包含多种频率成分，经电容\(C\)滤除高频部分后，在输出端可得到还原的低频信号。

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.7\textwidth]{./fig/design_circuit.png}
    \caption{包络检波设计电路}
    \label{fig:design_circuit}
\end{figure}
\newpage
% 仿真结果及分析部分
\subsubsection{仿真结果及分析}
(1) \textbf{无失真包络检波}


闭合开关\(A\)、\(C\)，此时二极管包络检波后的波形为正弦波，输出无明显失真，幅度约为\(7.5V\)。
\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.5\textwidth]{./fig/5511unreal3.png}
    \caption{无失真包络检波}
    \label{fig:5511unreal1}
\end{figure}

(2) \textbf{惰性失真}


闭合开关\(B\)、\(C\)，二极管包络检波后的波形呈锯齿状变化，输出明显失真，且为惰性失真。
\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.5\textwidth]{./fig/5511unreal1.png}
    \caption{惰性失真}
    \label{fig:5511unreal2}
\end{figure}
\newpage
(3) \textbf{底峰切割失真}


闭合开关\(A\)、\(D\)，并将滑动变阻器调至\(100\%\)，此时二极管包络检波后的正弦波输出波形底部被切割一部分，出现明显失真，即底峰切割失真。
\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.5\textwidth]{./fig/5511unreal2.png}
    \caption{底峰切割失真}
    \label{fig:5511unreal3}
\end{figure}

在上面提到的内容中，从多个方面介绍了二极管包络检波的原理，电路结构，以及各种参数选择与计算公式，便于读者理解该电路的原理，也为使用ADL5511打下基础。
\newpage
\subsection{电路原理图}
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=1.0]{./fig/ADL5511 Board Schematic}
	\caption{ADL5511电路原理图}
	\label{fig:ADL5511 Board Schematic}
\end{figure}
 C13, C14：电源去耦，0.01µF和100 pF。 C17:RMS滤波电容器（FLT4）。内部均方根平均电容可以通过在C17中放置额外电容来增强。 R5C1：射频输入接口。R5的75 Ω电阻与ADL5511内部输入阻抗相结合，提供约50 Ω的宽带输入阻抗。C1为交流耦合电容，应根据标称载频选择。  R18和C9：有效值输出和输出过滤。C9和内部100 Ω输出电阻的组合可以用来形成一个低通滤波器，以降低VRMS输出上的输出噪声，超过由于C17 （FLT4上的电容器）的降低。有效值输出在VRMS夹接测试点上可用。要用SMA电缆观察VRMS，可以将SMA连接器焊接在标有VRMS1的焊盘上。  R19,C8,R2,JP1：VENV输出和输出滤波。VENV输出可在VENV SMA连接器上使用。如果需要后包络滤波，可以使用R19和C8在VENV输出处形成低通滤波器。R2可以移除以隔离JP1跳线与VENV SMA连接器，JP1可以安装并用于连接FET探头。这有助于消除任何多余的走线和连接器电容。  R20C7：包络参考输出和输出过滤。EREF输出在EREF夹接测试点上可用。EREF引脚的直流参考电压可以通过R20和C7组合形成的低通滤波器进行滤波。为了使用SMA电缆观察EREF电压，可以将SMA连接器焊接到标记为EREF1的焊盘上 R1SW1设备支持。当开关指向SW1标签时，ENBL引脚连接到VPOS，使能ADL5511。在相反的开关位置，ENBL引脚接地，禁用ADL5511。 C6，C10：包络载波去除滤波器（FLT2, FLT3）。内部VENV两极载波去除滤波器的拐角频率可以通过在C6和C10中放置额外的电容器来降低。C2：包络参考载波去除滤波器（FLT1）。从包络参考直流电压中去除载波的内部滤波器可以通过在C2中放置电容器来增强。 R3,R14,R15,R16,R17：备用接口。P2边缘连接器为各种ADL5511信号提供替代接入点。

\part{基础知识}

\chapter{电流反馈型运算放大器}
竞赛中常使用电流反馈放大器作为宽带放大器的构成部分。首先解释电流反馈与电压反馈的不同，顾名思义，“电压反馈”是指误差信号表现为电压形式的闭环配置。传统运算放大器使用电压反馈，即其输入端会对电压变化做出响应，产生对应的输出电压。“电流反馈”是指用于反馈的误差信号表现为电流形式的闭环配置。电流反馈型运算放大器在其输人端对误差电流面不是误差电压做出响应，产生相应的输出电压。请注意，两种开环结构均能实现同样的闭环效果：零差分输人电压和零输入电流。

理想电压反馈型放大器的输入端为高阻抗，因而输入电流为零，并通过电压反馈保持零输人电压。相反、理想电流反馈型运算放大器的输入端则为低阻抗，因而输入电压为零，并通过电流反馈保持零输入电流。跨导放大器的传递函数表示为输出电压与输入电流的比。这意味着，开环“增益”$V_O/I$用欧姆表示。因此，可以将电流反馈型运算放大器称为“跨导放大器”。有趣的是、也可以用电流（例如来自光电二极管）驱动其动态低阻抗求和节点，这样就能产生一个输出电压，它等开输人电流乘以反馈电阻，从而将电压反馈型运算放大器电路的闭环关系配置为跨导。更有趣的是，由于任何运算放大器应用都可以采用电压反馈或电流反馈来实现，因此可以用电流反馈型运算放大器实现同样的I-V转换器。使用“跨导放大器”这一术语时，应当明白特定电流反馈型运算放

下面就电流型反馈运放的使用给出一些建议：

1、电流反馈运放的同向放大电路与反向放大电流的增益公式与电压反馈运放一致，但一般使用同向放大。

2、一般来说，用电流反馈运放设计电路时必须使用数据手册上推荐的Rf值。

3.不要在反馈路径上跨电容。

4.电流反馈运放的压摆率较大，更适合高频放大，但直流特性差。

5、尽量不要在输出端接容性负载。

6、一般不用电流反馈运放设计有源滤波器。
\chapter{天线和射频功率放大器}

竞赛过程中，高频类题目常会涉及无线信号的发射和接收，这涉及到电磁场与电磁波及天线理论，还需具备高频功率放大器知识。实践过程中发现，多数同学因课程教学在三年级上学期才能进行，时间滞后导致无法在竞赛中完成相关天线设计，因此需要在培训过程中进行理论讲解和实践，本章内容正是为了此目的而编写的。本章将从基本天线理论出发，介绍竞赛中常用的短波天线设计方法，并对射频功率放大器的理论计算和实践技巧予以陈述。

\section{阻抗匹配和史密斯圆图}
在信号传输系统中，为了使得系统传输功率最大或者使得信号反射最小，需要进行阻抗匹配。
\subsection{用史密斯圆图进行阻抗匹配}

\subsubsection{史密斯圆图的观察方法}

传输线上任意一点的反射系数$\Gamma$可以表示为：
\begin{equation}
	\Gamma = \frac{Z_L - Z_0}{Z_L + Z_0} = \frac{z - 1}{z + 1}
\end{equation}
其中，$z = Z_L/{Z_0}$为归一化阻抗，$Z_L$是负载阻抗，$Z_0$是本征阻抗，通常为50$\Omega$。
假设$z = r + jx$，则阻抗复平面图如图\ref{impedance_complex_plane}所示。
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.7]{./fig/impedance_complex_plane}
	\caption{阻抗复平面图}
	\label{impedance_complex_plane}
\end{figure}
再通过弯曲（虚轴的正负无穷和实轴的正无穷三点重合），得到史密斯圆图，主要由电阻圆和电抗线组成，分别为归一化阻抗的实部和虚部，如图\ref{Smith_figure}所示。其中右边蓝色的为阻抗图，左边红色的为导纳图。
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.7]{./fig/Smith_figure}
	\caption{史密斯圆图}
	\label{Smith_figure}
\end{figure}
例如负载阻抗为$Z_L = 250 + j50$的归一化阻抗$z = 5 + j$，将其标记在史密斯圆图上如图\ref{Smith_example}所示。
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.7]{./fig/Smith_example}
	\caption{z = 5 + j标记在史密斯圆图上}
	\label{Smith_example}
\end{figure}

\subsubsection{阻抗匹配电路的设计}
在实际中进行阻抗匹配时，需要先使用矢量网络分析仪测量阻抗，根据“上感下容、左并右串”的规律，进行元件调整。以负载阻抗$z = 5 + j$、源端为50$\Omega$为例，首先需要将负载阻抗移动到$r=1$的阻抗圆上，再沿着阻抗圆移动与源端重合。

移动到$r=1$的阻抗圆上，可以向上沿着左边的圆移动（并联电感），也可以向下沿着左边的圆移动（并联电容）。如图\ref{匹配的第一步}所示。
\begin{figure}[htbp]
	\centering
	% 第一个子图
	\begin{subfigure}{0.7\textwidth}
		\centering
		\includegraphics[width=\textwidth]{./fig/Smith_example11.png}
		\caption{并联电感}
		\label{并联电感}
	\end{subfigure}
	\hfill
	% 第二个子图
	\begin{subfigure}{0.7\textwidth}
		\centering
		\includegraphics[width=\textwidth]{./fig/Smith_example21.png}
		\caption{并联电容}
		\label{并联电容}
	\end{subfigure}
	% 整体图标题
	\caption{ }
	\label{匹配的第一步}
\end{figure}
移动到$r=1$的电阻圆上后，如果第一步是使用的并联电感的方法，则应再沿着电阻圆向下移动（串联电容）；如果第一步是使用的并联电容的方法，则应再沿着电阻圆向上移动（串联电感）。如图\ref{匹配的第二步}
\begin{figure}[htbp]
	\centering
	% 第一个子图
	\begin{subfigure}{0.7\textwidth}
		\centering
		\includegraphics[width=\textwidth]{./fig/Smith_example12.png}
		\caption{串联电容}
		\label{串联电容}
	\end{subfigure}
	\hfill
	% 第二个子图
	\begin{subfigure}{0.7\textwidth}
		\centering
		\includegraphics[width=\textwidth]{./fig/Smith_example22.png}
		\caption{串联电感}
		\label{串联电感}
	\end{subfigure}
	% 整体图标题
	\caption{ }
	\label{匹配的第二步}
\end{figure}

匹配网络的设计可以借助仿真软件来设计，也可以借助矢量网络分析仪里自带的L/C匹配参数计算进行设计。L/C匹配网络的结构如图\ref{LC_impedance_structure}所示。其中“Src shunt”表示源端并联网络，“Series”表示串联网络，“Load shunt”表示负载端并联网络。
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.7]{./fig/LC_impedance_structure}
	\caption{L/C匹配网络结构}
	\label{LC_impedance_structure}
\end{figure}
匹配示例如图\ref{LC_example}所示。由图可知，负载阻抗为$38.3-44.1j$，自动匹配计算得到4组匹配参数：
\begin{itemize}
	\item 源端并联 3.85pF 电容，串联 22.7nH 电感
	\item 源端并联 31.5nH 电感，串联 7.96nH 电感
	\item 负载端并联 115nH 电感，串联 15.4nH 电感
	\item 负载端并联 15.2nH 电感，串联 7.88pF 电容
\end{itemize}
以上4组匹配参数都可以实现负载阻抗与源端50欧姆的匹配。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.2]{./fig/LC_example}
	\caption{L/C匹配示例}
	\label{LC_example}
\end{figure}

\subsection{矢量分析仪使用}

图\ref{vna}为实验室所使用的矢量网络分析仪

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.4]{./fig/VNA.jpg}
	\caption{矢量网络分析仪}
	\label{vna}
\end{figure}

\subsubsection{矢量分析仪的校准}

开始校准之前需要准备好以下配件：
图\ref{adjust}从左到右依次是
（1）SMA 开路校准件；
（2）SMA 短路校准件；
（3）SMA 负载校准件；

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=1.6]{./fig/adjust.jpg}
	\caption{校准件}
	\label{adjust}
\end{figure}

首先需要设置适当的频率范围，点击【开始校准】进入校准界面，按照下述步骤进行校准操作：
1.将开路校准件连接至 PORT1 端口或与 PORT1 端口连接的电缆末端，如下图\ref{adjust_1}所示：

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=1.6]{./fig/adjust_1.png}
	\caption{开路校准}
	\label{adjust_1}
\end{figure}

点击【开路】，设备发出“滴”一声，同时菜单变为灰色，不可操作；等待 2-3 秒后设备再次
发出“滴”一声，【开路】菜单按钮上出现√，同时屏幕上部出现字母“O”，表明开路校准已完成。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=1.0]{./fig/adjust_3.png}
	\caption{短路校准界面}
	\label{adjust_3}
\end{figure}

2.将短路校准件连接至 PORT1 端口或与 PORT1 端口连接的电缆末端，点击【短路】完成短
路校准。

3.将负载校准件连接至 PORT1 端口或与 PORT1 端口连接的电缆末端，点击【负载】完成匹
配校准。

4.用电缆和转接头（可选）将 PORT1 和 PORT2 直连，如图\ref{adjust2}所示，点击【直通】完成直通
校准。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=1.6]{./fig/adjust2.png}
	\caption{直通校准界面}
	\label{adjust2}
\end{figure}

5.点击【完成】，屏幕上部出现 OSLT ，表明校准结果已生成，但尚未保存；屏幕右侧同
时出现保存菜单，如果保存槽位已存有校准状态，则会显示此处保存的校准状态的频率范围。
点击【存入 n】保存本次校准状态，也可点击【文件保存】以文件形式保存。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=1.0]{./fig/adjust_save.png}
	\caption{校准保存界面}
	\label{adjust_save}
\end{figure}

VNA 在校准完成后应具有如下特性：

（1）PORT1 开路时 S11 史密斯迹线汇聚在史密斯圆最右侧，S11 幅频迹线在 0dB 附近，
S21 幅频迹线幅度越低越好；

（2）PORT1 短路时 S11 史密斯迹线汇聚在史密斯圆最左侧，S11 幅频迹线在 0dB 附近，
S21 幅频迹线幅度越低越好；

（3）PORT1 接 50 欧姆负载时 S11 史密斯迹线汇聚在史密斯圆圆心位置，S11 幅频迹线和
S21 幅频迹线幅度越低越好；

（4）PORT1 和 PORT2 直连时 S11 史密斯迹线在史密斯圆圆心附近，S21 幅频迹线在 0dB
附近，S11 幅频迹线幅度越低越好。

\subsubsection{L/C 匹配}

SV4401A 支持 L/C 匹配参数自动计算，将负载阻抗匹配至源端 50 欧姆阻抗。 L/C 匹配网络的结构如图\ref{VNA_LC}所示：
示例：

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=1.0]{./fig/VNA_LC.png}
	\caption{L/C 匹配网络结构}
	\label{VNA_LC}
\end{figure}


\begin{figure}[htbp]
	\centering
	\includegraphics[scale=1.0]{./fig/VNA_LCexample.png}
	\caption{L/C匹配示例}
	\label{VNA_LCexample}
\end{figure}

图\ref{VNA_LCexample}中，负载阻抗为 35.3-22.9j，自动匹配计算得到 4 组匹配参数： 

1.源端并联 4.73pF 电容，串联 16.8nH 电感；
2.源端并联 28.5nH 电感，串联 56.8pH 电感； 
3.负载端并联 31.4nH 电感，串联 1.16nH 电感； 
4.负载端并联 25.9nH 电感，串联 115pF 电容；

以上 4 组匹配参数都可以实现负载阻抗与源端 50 欧姆的匹配。

\section{丙类放大器设计}
\section{短波天线设计制作}
水平偶极天线是最基本，也是最常见的天线形式，垂直天线和其它形式的天线都是偶极天线的变形。把偶极子天线水平地平行架设在地面上，就成为水平偶极天线（Dipole，DP）。这是最基本的天线形式,水平偶极天线需架设两条长度相等的振子，在两条振子中间作馈电点输入、输出信号。偶极子有两个导体臂组成，馈电位置一般在中间，通过中间馈电能量的驱动，可以不停的震荡两个导体臂上的电荷来回运动，最终实现电场和磁场的闭环，最终完成电磁波辐射。当一个导体臂的长度约为$\frac{1}{4}\lambda$，即两个导体臂加起来长度为$1/2$波长时，偶极子就变成了半波振子天线，此时其在对应的频率下具有几乎最佳的辐射效率。

通常也称1/4波长的天线为鞭状天线。此类天线是小型无线收发机用得较多的一种天线。实际应用中，由于受体积限制，天线的长度需要做成小于1/4波长，所以要在天线上加电感，电感的加载方式有3种，即底部加载，中部加载和顶部加载，每种加载方式都有其优点和缺点。从机械的角度看，底部加载最理想，但是这种加载方式的辐射电阻很低而且由于大多数能量是从加载线圈辐射出来，因此效率比较低。中部加载的辐射电阻会增加，但在这种情况下要产生谐振就得有更大的电感，加载的位置越向上，所需的电感就越大。顶部加载的天线较少见，这是因为天线顶部沉重的电感线圈会使整个结构变得不稳固，机械强度无法保证。从各个因素来考虑，中部加载的天线最优。

垂直架设的鞭状天线只能接收垂直极化波，但可把1/4波长天线制成垂直和水平相结合的组合结构天线。即既可接收垂直极化波又可以接收水平极化波，在这种情况下，我们可将垂直部分的长度做成大于1/4波长，使天线呈电感性，然后在天线的顶部用一个十字形导线与垂直部分形成一个电容而使天线发生谐振。
\section{单片集成低噪声放大器}
\chapter{高频电路布线方法}


首先我们需要了解一下，低频布线和高频之间的主要差距是什么。高频信号频率快波长短，会在电路中产生趋肤效应，趋肤效应是指在高频电路中，交流电流更倾向于沿着导体表面流动的现象。 当频率增加时，电流不再均匀地分布在整个导体截面上，而是主要集中在导体表面附近的薄层区域内。 这是由于高频信号的磁场感应作用引起的导体内部电流密度分布变化。数字电路通常借助于地和电源平面来完成回流。高频信号和低频信号的回流通路是不相同的，低频信号回流选择阻抗最低路径，高频信号回流选择感抗最低的路径。
我们可以简单地理解一下趋肤效应：当电流从信号源出发，流经信号线，注入信号的接收端，总有一个与之方向相反的返回电流，从负载的地引脚出发，经过敷铜平面，流向信号源，与流经信号线上的电流构成闭合回路。这种流经敷铜平面的电流所引起的噪声频率与信号频率相当，信号频率越高，噪声频率越高。
接下来我们看三个图；如图\ref{gaopin}，和图\ref{gaopin1}，和图\ref{gaopin2}。可以明显地看到我们电流对周围平面的影响逐渐地缩小到回流孔所包围的电路线当中。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.4]{./fig/gaopin.png}
	\caption{回流孔}
	\label{gaopin}
\end{figure}

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.4]{./fig/gaopin1.png}
	\caption{回流孔}
	\label{gaopin1}
\end{figure}

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.4]{./fig/gaopin2.png}
	\caption{回流孔}
	\label{gaopin2}
\end{figure}

所以在布局高频电子线路时，我们需要怎么做呢？
首先需要我们去添加回流孔，回流地孔在高速PCB中的作用时可以保证TEM模式信号传输，提供最小电感返回路径，抑制串扰（辐射）。回流地孔可以改善导体表面的电流分布，减少涡旋感应电流，降低电场辐射。
正常情况下，如果我们将俩个信号线并排的去布线，在平频率较低时，俩个信号之间相互的影响较小；当高频信号时，因为趋肤效应，俩个并排线之间就会有干扰的形成，形成串扰，对俩个信号线之间形成干扰，以扰乱原来的信号。

所以我们需要添加回流孔的设计，使高频信号之间的干扰减弱，那么设计回流孔应该怎样做呢？
在设计回流孔时，回流孔可以近似看作是过孔，我们只需要将回流孔打在高频信号线的俩边，同时应该尽量在俩边从输入打到输出，并不需要打得非常满，只需要覆盖到俩边就好，同时从一些经验规则来说，回流孔也不是打的越整齐越好。

\section{库电容的设计}

所谓的库电容，其实是一个百uF数量级的电解电容。它的作用是，当负载出现突然的大电流需求，而电源一时不能提供如此大的电流输出，就会造成输出产生电压跌落。为避免这种现象出现，库电容在此时会释放它内部的电荷，形成补充电流输出，以减小电源的输出压力。这种库电容一般设计在电源进入电路板的入口处，且距离用电运放距离不能太。同时还会在其旁边紧挨着加一个退耦电容，就是一个比库电容小一到三个数量级的电容。如图\ref{gaopin4}


\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.4]{./fig/gaopin4.png}
	\caption{库电容}
	\label{gaopin4}
\end{figure}

同时话需要注意的是，电源线在正常情况下是要比平常的走线要宽一些的。

\section{运放反馈电路}
关于告诉运放的反馈电路来说，在运放的反馈支路上，我们需要对其正反的覆铜面做一个简单的镂空设计，如图\ref{gaopin5}
这样可以减少返回时的干扰，保证信号放大的稳定性；也可以进行只在背面铺铜，上面只走线的设计。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.4]{./fig/gaopin5.png}
	\caption{运放反馈}
	\label{gaopin5}
\end{figure}

同时在高频线路板上，模拟信号与数字信号需要地线隔离来避免干扰在高频电路布线中，要注意将模拟信号地线和数字信号地线分开，并采用适当的方法隔离它们。这样可以避免高频数字信号对模拟信号的干扰，保持信号的准确性和稳定性；高频信号走线应尽量避免形成环路，避免信号的干扰和反射。若无法避免，尽量减小环路的面积，降低对信号传输的影响。需要合理连接模拟地线和数字地线，并选择适当的方法确保它们的连接，以保证信号的准确性和稳定性。

\section{阻抗匹配}
保持信号阻抗匹配，提高传输性能。在高频电路布线中，保持信号传输线的阻抗匹配非常重要。通过使传输线的特性阻抗与负载阻抗相等，可以减少信号反射，提高信号传输的完整性和稳定性。保持信号完整性，防止“地弹现象”-保证信号质量为了保持信号传输的完整性，应避免地线分割引起的“地弹现象”。

\section{其他要求}
在布线时，高电压区和低电压区之间，为了防止之间产生击穿的效应，我们可以在俩块区域之间画出一条挖空的横线。

在画电路时，我们需要满足3W原则。3W原则是指在PCB设计中为了减少线间 串扰，应保证线间距足够大，当线中心间距不少于3倍线宽时，则可保持大部分电场不互相干扰，这就是3W规则。3W原则是指多个高速信号线长距离走线的时候，其间距应该遵循3W原则，例如时钟线，差分线，视频、音频信号线，复位信号线及其他系统关键电路需要遵循3W原则，而并不是板上所有的布线都要强制符合3W原则。同时我们还应该要知道蛇形走线的一个设计，蛇形走线的主要目的是为了是信号同步，蛇形走线是将短的信号线通过蛇形的走法，使短的信号线和长的信号可以相等长度，信号在走过相同的路径时，时间的延迟改变相同，就可以保证俩个信号之间的同步。

除了上述常用的规则外，我们还需要经常的注意芯片手册上面给出我们的布线图，去仔细地阅读，看看在设计时有没有别的一些特殊的要求需要我们去设计。同时如果给出了布局指南，我们可以按照所给出的图形去设计。如图

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.4]{./fig/gaopin3.png}
	\caption{布局示例}
	\label{gaopin3}
\end{figure}

\chapter{数字滤波器}

\section{数字滤波器设计与应用}

\subsection{什么是滤波器}
滤波器是一种处理信号的工具，旨在去除信号中的噪声或者不需要的频率成分。滤波器根据其工作原理分为模拟滤波器和数字滤波器，而数字滤波器则通过数字信号处理技术对离散时间信号进行操作。
滤波器的应用非常广泛，尤其是在通信、音频处理、图像处理等领域。根据不同的应用需求，滤波器可以选择不同的类型和设计方法。

\subsubsection{滤波器类型}
常见的滤波器类型包括低通、高通、带通和带阻滤波器，它们根据频率选择性来区分信号中的频率成分：

\begin{itemize}
    \item \textbf{巴特沃斯滤波器}：巴特沃斯滤波器在通带内具有非常平坦的响应，且过渡带较为平缓。它常用于对信号进行平稳滤波时，尤其是当我们不希望在通带内有明显波动时。例如，当音频信号需要去除高频噪声，但不希望影响通带的频率特性时，巴特沃斯滤波器非常有效。
    \item \textbf{切比雪夫滤波器}：与巴特沃斯滤波器相比，切比雪夫滤波器在通带内允许存在一定波纹，以便实现更陡峭的频率过渡。切比雪夫滤波器适用于需要快速响应且能容忍通带纹波的场合，如在频率响应要求严格的通信系统中。
    \item \textbf{椭圆滤波器}：椭圆滤波器在通带和阻带内都有波纹，能够在较低阶数下实现急剧的频率过渡。它适合用于需要最小阶数的设计，如在资源有限（例如硬件处理能力有限）情况下，仍需要高效的滤波性能时。
\end{itemize}

为了更好地理解，以下图\ref{lvbo1}展示了三种IIR型滤波器的特性曲线：
\clearpage  % 强制换页，确保接下来的图片不会被提前放置
\begin{figure}[htbp]
    \centering
    \includegraphics[scale=0.8]{./fig/filter11.png}
    \caption{巴特沃斯、切比雪夫和椭圆型滤波器滤波效果曲线对比}
    \label{lvbo1}
\end{figure}

\subsubsection{窗函数选择}
窗函数是数字滤波器设计中的一个重要工具，特别是在FIR滤波器设计中。通过应用不同的窗函数，可以优化滤波器的频率响应，改善过渡带的宽度和旁瓣衰减。不同的窗函数适用于不同的场景，选择窗函数时需要根据设计目标做出权衡：

\begin{itemize}
    \item \textbf{汉宁窗}（Hanning window）：特点是能够平滑滤波器的频率响应，并减少旁瓣泄漏。它适合用于需要平滑响应的应用，比如去除小范围频率的干扰。由于旁瓣衰减较弱（大约-31.5 dB），适合对信号的频率选择要求较低的场合。汉宁窗的\textbf{旁瓣衰减}较弱，意味着它在滤波时对带外噪声的抑制效果不如其他窗函数。
    \item \textbf{汉明窗}（Hamming window）：在旁瓣衰减上优于汉宁窗，能够有效抑制旁瓣泄漏。适用于信号中对频域控制精度要求较高的场合，比如要求较强抑制噪声或者干扰信号的情况。汉明窗的旁瓣衰减大约为-53 dB，相较于汉宁窗，它对带外噪声有更好的抑制效果，因此非常适合对噪声或干扰信号要求较高的应用。
    \item \textbf{布莱克曼窗}（Blackman window）：具有最强的旁瓣衰减，因此适用于需要更高频域控制精度的应用。例如，在需要极高频率分辨率和最小化泄漏的精确滤波中，布莱克曼窗可以提供最优的性能。布莱克曼窗的旁瓣衰减达到大约-74 dB，提供了最强的旁瓣抑制，尤其适合对频率分辨率和带外噪声有极高要求的应用。
\end{itemize}

\subsubsection{旁瓣衰减的意义}
旁瓣衰减（side lobe attenuation）是一个重要的滤波器设计参数。它表示滤波器在主瓣之外的频率区域（即旁瓣区域）的抑制效果。具体来说，旁瓣衰减指的是旁瓣的高度，即旁瓣相对于主瓣的衰减程度。\textbf{旁瓣衰减}越强，滤波器能够\textbf{更有效地抑制不需要的频率成分}，特别是噪声或不需要的频率成分。例如，在低通滤波器中，旁瓣衰减强意味着高频噪声被有效抑制，从而获得更干净的信号。然而，较强的旁瓣衰减通常伴随着主瓣的扩展，导致过渡带宽度增大，即频率响应从通带到阻带的过渡不如理想的锐利。因此，在设计滤波器时，需要在旁瓣衰减和过渡带宽度之间做出权衡。\textbf{窗函数选择依据}：在相同采样频率（100kHz）、截止频率（10kHz）以及阶数（50）下，不同窗函数的滤波效果如图\ref{lvbo2}所示。
通过选择合适的窗函数，我们要根据具体需求平衡旁瓣衰减和过渡带宽度，从而得到最佳的滤波效果。
\begin{figure}[htbp]
    \centering
    \subfloat[汉宁窗]{
        \begin{minipage}[b]{.3\linewidth}
            \centering
            \includegraphics[scale=0.3]{./fig/fliter2.png}
        \end{minipage}
    }
    \subfloat[汉明窗]{
        \begin{minipage}[b]{.3\linewidth}
            \centering
            \includegraphics[scale=0.3]{./fig/fliter3.png}
        \end{minipage}
    }
    \subfloat[布莱克曼窗]{
        \begin{minipage}[b]{.3\linewidth}
            \centering
            \includegraphics[scale=0.3]{./fig/fliter4.png}
        \end{minipage}
    }
    \caption{不同窗函数滤波效果图对比}
    \label{lvbo2}
\end{figure}

当需要在通带内保持平稳响应而不关心过渡带的宽度时，\textbf{巴特沃斯滤波器}配合\textbf{汉宁窗}是一个不错的选择。如果要求快速衰减到阻带且不在乎通带内的轻微波纹，\textbf{切比雪夫滤波器}与\textbf{汉明窗}搭配较为合适。如果设计需要在较低阶数下实现急剧的频率过渡，可以选择\textbf{椭圆滤波器}与\textbf{布莱克曼窗}。

\section{什么是数字滤波器}

数字滤波器是一种用于对数字信号进行处理的工具，主要用于改善信号质量、抑制噪声或提取感兴趣的信号频率成分。

\section{数字滤波器在电赛中的应用}

在电子设计中，滤波器扮演着至关重要的角色。滤波器的作用主要是根据信号的频率特性进行信号的筛选与处理，它能够有效地隔离和抑制噪声，提取有用信号，从而保证信号的纯净度和稳定性。在电赛A题的背景下，滤波器可以帮助设计者解决信号处理中的各种问题，比如消除电源线干扰、滤除高频噪声、改善信号的信噪比等。具体到应用，滤波器可以分为低通、高通、带通和带阻等类型，每种类型的滤波器在电子设计中都有其特定的用途和设计要求。

\section{数字滤波器设计流程}

数字滤波器的设计和使用主要分为以下几个步骤：
1.首先，在Matlab中选择滤波器类型，可以选择FIR或IIR滤波器，并根据需求设定滤波器的阶数、类型（低通、高通、带通等）以及相应的窗函数。可以通过Matlab的Filter Design软件来实现，并生成所需的滤波器系数文件（.C文件）。
2.设计完成后，可以将生成的滤波器文件导入到KEIL5工程中。在Matlab中生成的.C文件需保存到适当的路径，并在KEIL5中配置相关库，确保能够顺利调用DSP库进行滤波计算。
\subsection{使用Matlab设计滤波器}
打开Filter Design页面如图\ref{lvbo3}所示，选择完所需滤波器类型后，依次选择好响应类型（低通、高通、带通）、指定阶数、对应函数（如选窗函数，则可以选择上节介绍过的汉明窗等）、最后根据需要设定合适的截至频率（fc）以及采样频率（fs）。
参数选择完后即可生成滤波器，如果对效果不满意可以不断调整函数以及阶数。生成的结果在“目标”栏中，点击“生成.C文件”并保存到你KEIL5工程所在位置，如图\ref{lvbo4}所示。至此，Matlab的作用已经结束。

\begin{figure}[htbp]
    \centering
    \includegraphics[width=15cm, height=6cm]{./fig/fliter5.png}
    \caption{Filter Design 页面}
    \label{lvbo3}
\end{figure}


\begin{figure}[htbp]
    \centering
    \includegraphics[width=15cm, height=10cm]{./fig/fliter6.png}
    \caption{滤波系数文件图}
    \label{lvbo4}
\end{figure}

\subsection{将Matlab设计结果导入KEIL5中}
设计完成后，可以将生成的滤波器文件导入到KEIL5工程中。在Matlab中生成的.C文件需保存到适当的路径，并在KEIL5中配置相关库，确保能够顺利调用DSP库进行滤波计算。

\subsection{KEIL5环境配置}
在KEIL5中，首先配置DSP库路径，并添加必要的LIB文件。确保正确设置路径，避免编译错误。具体步骤如下：

\begin{itemize}
    \item 在魔术棒（options for target）里的C/C++ 编译器的define预处理器宏中手动添加以下：
    \begin{verbatim}
      ARM_MATH_CM4, __CC_ARM, ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING
    \end{verbatim}
    \item 将DSP的库路径手动添加进来，确保库路径正确，如图 \ref{lvbo5} 红框部分所示。
    
    \begin{figure}[htbp]
	    \centering
	    \includegraphics[width=15cm, height=6cm]{./fig/fliter7.png}
	    \caption{DSP库路径添加图}
	    \label{lvbo5}
    \end{figure}

    \item 添加两个LIB文件到工程中，路径根据芯片型号选择：
    \begin{verbatim}
        Drivers\CMSIS\DSP\Lib\ARM\arm_cortexM7lfdp_math.lib
    \end{verbatim}
    和
    \begin{verbatim}
        Drivers\CMSIS\DSP\Lib\ARM\arm_cortexM7lfsp_math.lib
    \end{verbatim}
	要注意的是，由于我采用的是 STM32H743 芯片，所以导入的文件名为 cortexM7。
\end{itemize}

\subsection{封装函数与调用}
首先，读者可以自行在 \texttt{arm\_math.h} 文件中找到关于 FIR 滤波的初始化和滤波函数，函数名为 \texttt{arm\_fir\_init\_f32()} 和 \texttt{arm\_fir\_f32()}。函数形参的解释放在下面：

\begin{lstlisting}[basicstyle=\ttfamily\small, columns=fixed, fontadjust=true]
// filter function
void arm_fir_init_f32(
	arm_fir_instance_f32 * S,
	uint16_t numTaps,
	const float32_t * pCoeffs, // filter coefficent
	float32_t * pState,        // filter state
	uint32_t blockSize);       // buffer size
\end{lstlisting}

在明白了系统库函数的功能后，就要根据这两个公式，编写我们自己要用的滤波功能函数，主要操作包括创建采样数组、输出数组等操作，详细代码如下（本文仅以低通功能为例，如果要用高通或带通需要matlab设计成对应类型，其余操作不变，因此本代码具有通用性，读者不必纠结）
以下是使用ARM CMSIS DSP库在STM32微控制器上实现低通FIR滤波器的C代码。

\begin{lstlisting}[language=C,basicstyle=\ttfamily\small, columns=fixed, fontadjust=true]
#include "FLITER.H"
#include "arm_math.h"
#include "stm32h7xx_it.h"
#include "main.h"
//宏定义变量，便于函数拓展修改
#define BLOCKSIZE 1//缓冲区大小
#define fliter_samplelenth 1000
#define NUMTAPS 51//滤波器系数
/* 采样点，输入到数字滤波器的次数 */
float32_t fliter_input[fliter_samplelenth]; 
/* 滤波后的输出，输出到数字滤波器的次数 */
float32_t fliter_output[fliter_samplelenth]; 
/* 状态缓存，大小为 numTaps + blockSize - 1 */
float32_t firState[BLOCKSIZE + NUMTAPS - 1]; 
/* 处理的块大小 */
uint32_t blockSize = BLOCKSIZE;  
/* 调用 arm_fir_f32 的次数 */
uint32_t numBlocks = fliter_samplelenth / BLOCKSIZE; 
/* ADC读取的原始值 */
uint32_t ADC_fliter_Raw[fliter_samplelenth];

float32_t flier_Coeffs[NUMTAPS] = {
    0, 3.076064275419e-05, 0.0002069239632984, 
    0.0005514618210775, -7.450842533148e-19, 
	-0.001335532505219, -0.003051424999861,
    -0.004136254804894, -0.003360062588369, 
	2.695740152975e-18, 0.005434345770561,
    0.01092117736234, 0.0134166028745, 
	0.01010615661675, -5.106883445667e-18,
	//其他数据略
}; /* 滤波系数，来自MATLAB生成并直接复制到头文件中 */

arm_fir_instance_f32 S; /* FIR滤波器实例 */
float32_t *input;  /* 输入数据的指针 */
float32_t *output; /* 输出数据的指针 */
// 数字滤波器初始化函数
void fliter_init_f32(void)
{
    input = fliter_input;
    output = fliter_output;
    arm_fir_init_f32
    (
        &S,
        NUMTAPS,
        (float32_t *)&flier_Coeffs[0],
        &firState[0],
        BLOCKSIZE
    );
}
// 低通FIR滤波器函数
void arm_fir_f32_lp(void)
{
    uint16_t i = 0;
    for (i = 0; i <= numBlocks; i++)
    {
    	//遍历输入数组，并将滤波数据传到数组output_fliter中用于后续操作
        arm_fir_f32(&S, input + (i * BLOCKSIZE),  
	output + (i * BLOCKSIZE),  BLOCKSIZE);
    }
}
\end{lstlisting}
在封装完函数后，只要在主函数中调用函数 \texttt{arm\_fir\_f32\_lp()}，就可以将\texttt{filter\_input}数组中通过ADC的采集的数据滤波，存入\texttt{filter\_output}数组中。如果需要提取，可以通过串口打印，或者通过DAC模式输出，最终就能在屏幕上描点，形成滤波后的图像。

\subsection{实时采集和滤波方案}
利用TIM时钟实现ADC的触发采集，并通过DMA快速将数据转移到\texttt{filter\_input}数组。此方案的关键在于，TIM时钟触发的频率需要与MATLAB设计滤波器时的采样频率相同，以保证采集的准确性。需要开启DMA中断并编写中断数据处理函数的逻辑。

\subsubsection{定时器溢出时间计算}
对于第一个关键点，定时器溢出问题，需要先了解一个公式。
定时器溢出时间 \( T_{\text{out}} \)（单位：\(\mu\)s）由以下公式给出：

\begin{equation}
T_{\text{out}} = \frac{(ARR + 1) \cdot (PSC + 1)}{T_{\text{clk}}}
\end{equation}

\begin{itemize}
    \item \( ARR \)（TIM\_Period）：自动重装载值，是定时器溢出前的计数值。
    \item \( PSC \)（TIM\_Prescaler）：预分频值，用来降低定时器时钟频率的参数。
    \item \( T_{\text{clk}} \)：定时器的输入时钟频率（单位：MHz），通常为系统时钟频率或者定时器外部时钟频率。
    \item \( T_{\text{out}} \)：定时器溢出时间（单位：\(\mu\)s）。
\end{itemize}
在知道公式后，我们在CUBEMX里配置时钟时就需要精确计算一下，以下面的代码为例：
\begin{lstlisting}[language=C,basicstyle=\ttfamily\small, columns=fixed, fontadjust=true]
htim2.Instance = TIM2;
htim2.Init.Prescaler = 240-1;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 10-1;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
\end{lstlisting}

由公式可知，这里采样频率要与抽头系数的采样频率对应，FS为100KHZ，所以采样频率=240MHZ/(240*10)=100000=100KHZ
\subsubsection{DMA中断的巧妙处理--状态机}
本工程先介绍一种普通的轮询方法，此方案的逻辑如图\ref{lvbo6}：先开启TIM然后由于ADC1是通过TIM2触发，所以定时器完成一次计时后ADC会读取1000个数据保存到数组\texttt{ADCr\_fliterr\_Raw}中；随后，待数据读取完，再运行滤波函数\texttt{ armr\_firr\_f32r\_lp（）}，最后通过串口输出。
此方法的优点在于代码书写简单，便于初学者理解滤波器的工作原理，但是弊端也很显著，效率太慢，而且由于滤波速度远低于ADC读取速度，因此，一组数据还没处理完就被新数据覆盖了，会有很大失真的问题出现。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.7]{./fig/fliter8.png}
	\caption{轮询法数据处理代码}
	\label{lvbo6}
\end{figure}

除了上述基础的采集方法外，这里再介绍一种利用DMA中断状态机的方法来快速读取以及避免中断卡死的方法。中断函数是一种不需要写在主函数里，以触发中断事件发生为判断条件的函数。本法案利用的是DMA采集中断函数。本文不具体讲述CUBEMX初始化的细节，更注重函数逻辑的编写。
中断函数有一个原则需要各位读者明确，就是中断函数是非常快运行的，不建议将大量运算的函数放在中断里。那么就有一个问题，如何在利用中断的同时实现大量的计算。这就要引入中断标志位，又称状态机（具体代码如下）。
\begin{lstlisting}[language=C,basicstyle=\ttfamily\small, columns=fixed, fontadjust=true]
	void DMA1_Stream2_IRQHandler(void)
	{ if (__HAL_DMA_GET_FLAG(&hdma_adc1, DMA_FLAG_TCIF0_4))
	  {	// 清除 DMA 传输完成标志
		__HAL_DMA_CLEAR_FLAG(&hdma_adc1, DMA_FLAG_TCIF0_4);
		// 设置数据就绪标志，表示数据已采集完毕
		dataReadyFlag = 1;
	  }
	  HAL_DMA_IRQHandler(&hdma_adc1);
	}
\end{lstlisting}
代码中的\texttt{DMA\_FLAG\_TCIF0\_4}请读者关注一下，由于H7芯片在网络上资料较少，他的配置不像F407，这里的\texttt{0\_4}代表的是0到4多通道的标志位，如果你的ADC是独立的，也就是说只有一个，但是你仍然要用DMA模式，查找手册会发现，H7并没有独立的通道标志，只有一个统一的，也就是\texttt{DMA\_FLAG\_TCIF0\_4}，如果写\texttt{DMA\_FLAG\_TCIF2}是找不到对应的宏定义的。
这个中断的特点就是dataReadyFlag的变化。有了它就相当于将中断与主函数中负责运算的函数建立起了联系，同时又不会对中断造成阻塞。

接下来看一下数据处理函数
\begin{lstlisting}[language=C,basicstyle=\ttfamily\small, columns=fixed, fontadjust=true]
void fliter_data_process(void)
{
  // 确保只有在数据就绪时才处理
  if (dataReadyFlag)
  {	// 停止 DMA 采集，防止新的数据进入
    HAL_ADC_Stop_DMA(&hadc1);
    // 将 ADC 数据转换为电压值
    for (int i = 0; i < 1000; i++)
    {
      fliter_input[i] = (ADC_fliter_Raw[i] * 3.3f) / 65535.0f;  // 转换为电压值
    }
    // FIR 滤波处理
    arm_fir_f32_lp();  // 假设这是 FIR 滤波函数
    // 输出滤波后的数据
    for (int i = 9; i < 1000; i++)
    {
      printf("%f\r\n", (float)fliter_output[i]);  // 输出滤波后的数据
    }
    // 重置数据就绪标志，表示处理完成
    dataReadyFlag = 0;
    // 重新启动 DMA 采集，为下一次数据准备
    HAL_ADC_Start_DMA(&hadc1, ADC_fliter_Raw, 1000);  // 启动 DMA 采样
  }
}
\end{lstlisting}

数据处理函数有几个关键，1通过标志位判断来决定是否处理数据；2在进入这个函数后，为了避免DMA被触发进入中断，导致原先数据被覆盖，所以在函数开头加入了停止 DMA 采集，防止新的数据进入的语句。3对于滤波数据输出，因为前面几次数据并不稳定，滤波效果并不好，所以，做后输出时，选择从“9”输出，当然这个具体的看实际情况略作调整。

\subsection{进一步的优化方法}
有兴趣的读者可以在本书的内容上进行拓展，利用双缓冲、DMA中断、TIM中断等方法来改进数字滤波器的效果。这些方法有助于提高数据处理的效率和精度，尤其在实时系统中。
另外，本文举例为FIR型滤波器，设计IIR型的代码大差不差，唯一的区别是调用的函数不同，为了方便，在这里给读者列出，只需要将本文中的代码略作修改即可。将“封装函数与调用”小节中用到的\texttt{arm\_fir\_f32（）}改为\texttt{arm\_biquad\_cascade\_df1\_f32（）}、\texttt{arm\_fir\_init\_f32（）}改为\texttt{arm\_biquad\_cascade\_df1\_init\_f32（）}即可。
\subsection{MATLAB模拟计算结果与性能评估}
使用MATLAB对设计的滤波器进行模拟，评估其性能，并进行必要的优化调整，确保滤波器的效果符合设计要求。本工程在matlab中对FIR低通滤波做了图像模拟，（滤波器参数统一为20阶，采样频率50KHZ，截至频率5KHZ）输入信号分为5大类：
1. 带噪声的正弦波信号；（如图\ref{lvbo7-1}）
2. 脉冲信号；（如图\ref{lvbo7-2}）
3. 双频信号；（如图\ref{lvbo7-3}）
4. 周期性阶跃信号；（如图\ref{lvbo7-4}）
5. 带有调制的信号。（如图\ref{lvbo7-5}）

\begin{figure}[htbp]
    \centering
    \includegraphics[width=15cm, height=4.5cm]{./fig/fliter14.png}
    \caption{带噪声的正弦波信号}
    \label{lvbo7-1}
\end{figure}

\begin{figure}[htbp]
    \centering
    \includegraphics[width=15cm, height=4.5cm]{./fig/fliter15.png}
    \caption{脉冲信号}
    \label{lvbo7-2}
\end{figure}

\begin{figure}[htbp]
    \centering
    \includegraphics[width=15cm, height=4.5cm]{./fig/fliter16.png}
    \caption{双频信号}
    \label{lvbo7-3}
\end{figure}
\clearpage  % 强制换页，确保接下来的图片不会被提前放置
\begin{figure}[htbp]
    \centering
    \includegraphics[width=15cm, height=5cm]{./fig/fliter17.png}
    \caption{周期性阶跃信号}
    \label{lvbo7-4}
\end{figure}

\begin{figure}[htbp]
    \centering
    \includegraphics[width=15cm, height=5cm]{./fig/fliter18.png}
    \caption{带有调制的信号}
    \label{lvbo7-5}
\end{figure}

\subsection{滤波结论}
\begin{itemize}
    \item \textbf{带噪声信号：} 汉宁窗的效果可能相对较差，因为它的旁瓣衰减能力较弱。
    \item \textbf{双频信号：} 布莱克曼窗通常会提供最好的旁瓣衰减，适合需要强抑制高频噪声的场合。
    \item \textbf{脉冲信号：} 汉明窗和布莱克曼窗将有较好的效果，尤其在降低旁瓣时。
    \item \textbf{调制信号：} 比较窗函数对调制信号的频谱影响，布莱克曼窗一般能提供最好的频率选择。
\end{itemize}

理论上，布莱克曼最优。但是，由图像可以看出，实际上，由于滤波器采样频率较高，阶数较大，三者图像仅在最高点有些许区别，实际效果都差不多。


\chapter{锁相环和Costas环}
锁相环是电子设计竞赛中调频信号产生和解调的重要部件，Costas是基于锁相环的2PSK和4PSK解调装置，Costas环方便软件实现，在微控制器、FPGA和DSP系统中均有广泛应用。

\section{数字信号的发送与接收}
Costas环用于处理数字通信的2PSK和4PSK解调，因此应理解数字信号是如何发送、接收的。数字通信的信号处理过程，大多都使用复值信号，但是，复值信号在自然界中并不存在，那么在理论中的复数信号是如何通过现实中的通信系统发送和接收的呢？答案是IQ调制。

首先，对于一个复数信号$a+bj$来说，其总可以写成$Ae^{j\omega}=Acos\omega+jAsin\omega$的形式，因此对于任意一个复数的实部与虚部来说总是正交的。进而，假设我们要发送的基带信号中的一个码元为$a+bj$，则在IQ调制过程中，$a$作为同相分量I，$b$做为正交分量Q。首先对码元进行上变频，如式\ref{equ:iq-1}所示。
\begin{equation}
\begin{aligned}
	(a+bj)e^{j\omega_ct} &= (a+bj)(cos\omega_ct+jsin\omega_ct) \\
			     &= (acos\omega_ct-bsin\omega_ct) + j (bcos\omega_ct-asin\omega_ct) 
	\label{equ:iq-1}
\end{aligned}
\end{equation}

对上变频之后的信号取实部即得到IQ调制后的信号，如式\ref{iq-2}所示
\begin{equation}
\begin{aligned}
	s(t)&=Re\left[(a+bj)e^{j\omega_ct}\right] \\
	    &=acos\omega_ct-bsin\omega_ct
	\label{iq-2}
\end{aligned}
\end{equation}

可以看出，IQ调制后的信号是实数信号，最后通过数模转换将其发送出去。有关 IQ 调制的框图如图1所示
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.4]{./fig/iq-1.png}
	\caption{IQ调制发送示意图}
	\label{fig:iq-1}
\end{figure}

对于接收机来说，其接收到的信号$r(t)$为
\begin{equation}
	\begin{aligned}
		r(t) &= acos\omega_ct-bsin\omega_ct \\
		     &= \frac{a}{2}\left( e^{j\omega_0t}+ e^{-j\omega_0t}\right) +  \frac{jb}{2}\left( e^{j\omega_0t}- e^{-j\omega_0t}\right) 
	\label{iq-3}
\end{aligned}
\end{equation}

假设在接收端可以获得同发射端同频同相的载波信号$\omega_0$,则可将式\ref{iq-3}乘以载波下变频$\omega_0$完成同步检波
\begin{equation}
\begin{aligned}
	r(t)e^{-j\omega_0t} &= \left[ \frac{a}{2}\left( e^{j\omega_0t}+ e^{-j\omega_0t}\right) +  \frac{jb}{2}\left( e^{j\omega_0t}- e^{-j\omega_0t}\right) \right] e^{-j\omega_0t} \\
        &=\left(\frac{a}{2}+\frac{jb}{2}\right)+\left(\frac{a}{2}-\frac{jb}{2}\right)e^{-2j\omega_0t} 
	\end{aligned}
	\label{iq-4}
\end{equation}

接着通过积分器或者低通滤波即可得到原始信号$a+jb$，即$\frac{2}{T}\int_{T}\left(\frac{a}{2}+\frac{jb}{2}\right)+\left(\frac{a}{2}-\frac{jb}{2}\right)e^{-2j\omega_0t} dt=a+bj$
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.3]{./fig/iq-2.png}
	\caption{IQ调制收发示意图}
	\label{fig:iq-2}
\end{figure}

从以上介绍可以看出，获得与发射端同频同相的载波信号为数字通信系统的重要组成，锁相环正式为此而产生的频率相位跟踪电路

\section{锁相环原理}
锁相环（Phase-locked loops,缩写为PLL）是一种以消除频率误差为目的的相位负反馈控制系统，它的基本原理是利用相位误差去消除频率误差，
所以当电路达到平衡状态时，虽然有剩余相位误差存在，但频率误差可以降低到零，从而实现无频率误差的频率跟踪和相位跟踪。

\subsection{工作原理}
如图\ref{pdf:PLL_block_diagram}所示，它由鉴相器（Phase Detector,缩写为PD）、环路滤波器（Loop Filter，缩写为LF）和电压控制振荡器（Voltage Controlled Oscillator,缩写为VCO）三个基本部件组成。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=1.4]{./pdf/PLL_block_diagram.pdf}
	\caption{锁相环的基本构成}
	\label{pdf:PLL_block_diagram}
\end{figure}

设参考信号为
\begin{equation}
	u_r\left( t \right) =U_r\sin \left[ \omega _rt+\theta _r\left( t \right) \right] 
\end{equation}

式中$U_r$为参考信号的振幅，$\omega _r$为参考信号的载波角频率，$\theta _r\left( t \right)$，为信号以其载波相位$\omega _rt$为参考时的瞬时相位。
若参考信号是未调载波时，则$\theta _r\left( t \right)=\theta _r=\text{常数}$。

输出信号为

\begin{equation}
	u_o\left( t \right) =U_o\sin \left[ \omega _ot+\theta _o\left( t \right) \right] 
\end{equation}

式中$U_o$为参考信号的振幅，$\omega _o$为压控振荡器的自由振荡角频率，$\theta _o\left( t \right)$，为信号以其载波相位$\omega _ot$为参考时的瞬时相位,在VCO未受控之前它是常数，受控后它是时间的函数。

则参考信号和输出信号之间的瞬时相差为

\begin{equation}
	\theta _e\left( t \right) =\left( \omega _rt+\theta _r \right) -\left[ \omega _ot+\theta _o\left( t \right) \right] =\left( \omega _r-\omega _o \right) t+\theta _r-\theta _o\left( t \right) 
\end{equation}

由频率和相位之间的关系可得两信号之间的瞬时频差为

\begin{equation}
	\frac{\text{d}\theta _e\left( t \right)}{\text{d}t}=\left( \omega _r-\omega _o \right) -\frac{\text{d}\theta _o\left( t \right)}{\text{d}t}
\end{equation}

鉴相器是相位比较器，它把输出信号$u_o(t)$和参考信号$u_r(t)$的相位进行比较，产生对应于两信号相位差$\theta _e(t)$的误差电压$u_d(t)$。
环路滤波器是滤除误差电压$u_d(t)$中的高频成分和增强系统的稳定性,并产生控制电压$u_o(t)$,
压控振荡器受控制电压的$u_o(t)$的控制，控制电压的$u_o(t)$使压控振荡器的输出频率向参考信号的频率靠近，于是两者频率之差越来越小，直至频差消除而被锁定。

综上所述，锁相环的工作原理可简述如下：首先鉴相器把输出信号$u_o(t)$和参考信号$u_r(t)$的相位进行比较并产生对应于两信号相位差$\theta _e(t)$的误差电压$u_d(t)$，
误差电压$u_d(t)$经过环路滤波器的过滤得到控制电压$u_o(t)$,控制电压$u_o(t)$控制压控振荡器的输出频率向参考信号的频率靠拢，直至最后两者频率相等而相位同步实现锁定。

锁定后两信号之间的相位差表现为一固定的稳态值。即

\begin{equation}
	\underset{t\rightarrow \infty}{\lim}\frac{\text{d}\theta _e\left( t \right)}{\text{d}t}=\underset{t\rightarrow \infty}{\lim}\left[ \omega _r-\omega _o-\frac{\text{d}\theta _o\left( t \right)}{\text{d}t} \right] =0
\end{equation}

可以得到

\begin{equation}
	\frac{\text{d}\theta _o\left( t \right)}{\text{d}t}=\omega _r-\omega _o
\end{equation}

此时输出信号的工作频率已变为

\begin{equation}
	\omega _o'=\frac{\text{d}}{\text{d}t}\left[ \omega _ot+\theta _o\left( t \right) \right] =\omega _o+\frac{\text{d}\theta _o\left( t \right)}{\text{d}t}=\omega _r
\end{equation}

由此可见，通过锁相环路的相位跟踪作用，最终可以实现输出信号与参考信号同步，两者之间不存在频差而只存在很小的稳态相差。

\subsection{基本环路方程}

\subsubsection{鉴相器}

鉴相（PD）又称相位比较器，它是用来比较两个输入信号之间的相位差$\theta _e(t)$。 
鉴相器将参考时钟和分频器输出信号进行相位上的比较，输出是两个相位差值的函数。
理想情况是一个线性增益的输出，增益大小为 Kpd。但是实际的鉴相器会有很多的非理想特性：
非线性，有限的输出。
鉴相器输出的误差信号$u_d(t)$是相差$\theta _e(t)$的函数，即

\begin{equation}
	u_d\left( t \right) =\text{f}\left[ \theta _e\left( t \right) \right] 
\end{equation}

鉴相器的形式很多，按其鉴相特性分为正弦形、三角形和锯齿形等，现以正弦鉴相器为例分析其数学模型，
较为典型的正弦鉴相器可用模拟乘法器与低通滤波器的串接构成，如图\ref{pdf:PD_Sine}所示。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=1.8]{pdf/PD_Sine.pdf}
	\caption{正弦鉴相器模型}
	\label{pdf:PD_Sine}
\end{figure}

以压控振荡器的载波相位$\omega _ot$作为参考，将输出信号$u_ot$与参考信号$u_rt$变形，有

\begin{align}
	u_o\left( t \right) =U_o\sin \left[ \omega _ot+\theta _o\left( t \right) \right]=U_o\sin \left[ \omega _ot+\theta _2\left( t \right) \right] \label{equ:VCO} \\
	u_r\left( t \right) =U_r\sin \left[ \omega _rt+\theta _r\left( t \right) \right]=U_r\sin \left[ \omega _ot+\theta _1\left( t \right) \right]
\end{align}

式中

\begin{align}
	\theta _2(t)&=\theta _o(t) \\
	\theta _1\left( t \right) &=\left( \omega _r-\omega _0 \right) t+\theta _r\left( t \right) =\Delta \omega _ot+\theta _r\left( t \right) 
\end{align}

将$u_o(t)$与$u_r(t)$相乘，通过低通滤波器滤除高频分量$2\omega _0$，可得

\begin{equation}
	u_d\left( t \right) =U_d\sin \left[ \theta _1\left( t \right) -\theta _2\left( t \right) \right] =U_d\sin \left[ \theta _e\left( t \right) \right] 
\end{equation}

在一定范围内可近似得到

\begin{equation}
	u_d\left( t \right) =U_d\sin \left[ \theta _e\left( t \right) \right] \approx U_d\theta _e\left( t \right) \propto \theta _e\left( t \right) 
\end{equation}

式中$U_d=K_mU_rU_o/2$,$K_m$为相乘器的相乘系数,鉴相器输出的误差电压与两信号的误差相位成正比，并且在同样的$\theta _e(t)$下$U_d$越大，鉴相器的输出就越大。因此，$U_d$在一定程度上反映了鉴相器的灵敏度。
图\ref{pdf:PD_Mathematical_model}与\ref{pdf:PD_Fre_discrimination_characteristics}所示分别为正弦鉴相器的数学模型和鉴相特性。

\begin{figure}[htbp]
	\centering
    \begin{minipage}[t]{0.48\textwidth}
        \centering
        \includegraphics[width=\linewidth]{pdf/PD_Mathematical_model.pdf}
        \caption{线性鉴相器数学模型}
        \label{pdf:PD_Mathematical_model}
    \end{minipage}
    \hfill
    \begin{minipage}[t]{0.48\textwidth}
        \centering
        \includegraphics[width=\linewidth]{pdf/PD_Fre_discrimination_characteristics.pdf}
        \caption{正弦鉴相器的鉴相特性}
        \label{pdf:PD_Fre_discrimination_characteristics}
    \end{minipage}
\end{figure}

\subsubsection{环路滤波器}

环路滤波器（LF）是一个线性低通滤波器，用来滤除误差电压$u_d(t)$中高频分量和噪声，更重要的是它对环路参数调整起到决定性的作用。
环路滤波器由线性元件电阻、电容和运算放大器组成。因为它是一个线性系统，在频域分析中可用传递函数$F(s)$表示，其中$s=\sigma +j\omega $是复频率。
若用$s=j\omega $代入$F(s)$就得到它的频率响$F(j\omega)$。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=1.3]{pdf/LP_model.pdf}
	\caption{环路滤波器的模型}
	\label{pdf:LP_model}
\end{figure}

常用的环路滤波器有RC积分滤波器、无源比例积分滤波器和有源积分滤波器三种。

（1）RC积分滤波器:
这是最简单的低通滤波器，电路如图\ref{pdf:LP_RC}所示，其传递函数为

\begin{align}
	\text{时域：}F\left( p \right) &=\frac{u_c\left( t \right)}{u_d\left( t \right)}=\frac{1/RC}{\left( 1/RC \right) +p}=\frac{1}{1+p\tau} \\
	\text{频域：}F\left( s \right) &=\frac{U_c\left( s \right)}{U_d\left( s \right)}=\frac{1}{1+s\tau}
\end{align}

式中，$p$代表微分算子，$\tau =RC$。

\begin{figure}[htbp]
	\centering
    \begin{minipage}[t]{0.48\textwidth}
        \centering
		\includegraphics[scale=1.5]{pdf/LP_RC.pdf}
		\caption{RC积分滤波器的组成}
		\label{pdf:LP_RC}
    \end{minipage}
    \hfill
    \begin{minipage}[t]{0.48\textwidth}
		\centering
		\includegraphics[scale=1.3]{pdf/LP_R2C.pdf}
		\caption{无源比例积分滤波器的组成}
		\label{pdf:LP_R2C}
    \end{minipage}
\end{figure}

（2）无源比例积分滤波器：
如图\ref{pdf:LP_R2C}所示，与RC积分滤波器相比，它附加了一个与电容C串联的电阻$R_2$，这样就增加了一个可调参数。它的传递函数为

\begin{equation}
	F\left( s \right) =\frac{U_c\left( s \right)}{U_d\left( s \right)}=\frac{R_2+1/sC}{R_1+R_2+\left( 1/sC \right)}=\frac{1+s\tau _2}{1+s\left( \tau _1+\tau _2 \right)}
\end{equation}

式中,$\tau _1=R_1C,\tau _2=R_2C$。
当频率很高时，其频率响应为

\begin{equation}
	F\left( j\omega \right) =\frac{1+j\omega R_2C}{1+j\omega \left( R_1+R_2 \right) C}\approx \frac{R_2}{R_1+R_2}
\end{equation}

（3）有源比例积分滤波器：
有源比例积分滤波器由运算放大器组成，电路如\ref{pdf:LF_Loop}所示，设运算放大器的开环电压增益为A，其传递函数为

\begin{equation}
	F\left( s \right) =\frac{U_c\left( s \right)}{U_d\left( s \right)}=-A\frac{1+s\tau _2}{1+s\tau _{1}^{'}}
\end{equation}

式中,$\tau _{1}^{'}=\left( AR_1+R_1+R_2 \right) C,\tau _2=R_2C$。当A很高时

\begin{equation}
	F\left( s \right) =-A\frac{1+sR_2C}{1+s\left( R_1+AR_1+R_2 \right) C}\approx -A\frac{1+sR_2C}{sAR_1C}=-\frac{1+s\tau _2}{s\tau _1}
\end{equation}

\begin{figure}[htbp]
	\centering
    \begin{minipage}[t]{0.48\textwidth}
        \centering
        \includegraphics[width=0.8\linewidth]{pdf/LF_Loop.pdf}
        \caption{有源比例积分滤波器电路}
        \label{pdf:LF_Loop}
    \end{minipage}
    \hfill
    \begin{minipage}[t]{0.48\textwidth}
		\centering
		\includegraphics[width=0.6\linewidth]{pdf/VCO_model.pdf}
		\caption{VCO复频域模型}
		\label{pdf:VCO_model}
    \end{minipage}
\end{figure}

\subsubsection{压控振荡器}

压控振荡器（VCO）是一个电压——频率变换器，在环路中作为被控振荡器，它的振荡频率应随输入控制电压$u_c(t)$线性地变化，即

\begin{equation}
	\omega _\text{v}\left( t \right) =\omega _0+K_0u_c\left( t \right) 
\end{equation}

式中，$K_V$是线性特性斜率,称为VCO的增益或灵敏度。表示单位控制电压所引起的振荡角频率变化的大小。
VCO输出信号$u_o(t)$的瞬时相位为

\begin{equation}
	\theta \left( t \right) =\int_0^t{\omega _{\text{v}}\left( t \right)}\text{d}t=\omega _0t+K_0\int_0^t{u_c\left( t \right)}\text{d}t
\end{equation}

与式\ref{equ:VCO}比较,可知以$\omega _0(t)$为参考的输出瞬时相位为

\begin{equation}
	\theta _2\left( t \right) =K_0\int_0^t{u_c\left( t \right)}\text{d}t=\frac{K_0}{p}u_c\left( t \right) 
	\label{equ:VCO_math_model}
\end{equation}

上式就是压控振荡器相位控制特性的数学模型，对其进行拉氏变换可得VCO的传递函数为

\begin{equation}
	\frac{\varTheta \left( s \right)}{U_c\left( s \right)}=\frac{K_0}{s}
\end{equation}

VCO在复频域的数学模型如图\ref{pdf:VCO_model}所示。

\subsubsection{锁相环传递函数}

上面分别得到了鉴相器、环路滤波器和压控振荡器的模型，将三个模型连接起来，就可得到锁相环路的数学模型模型。
根据图\ref{pdf:PLL_Phase_model}可以得出锁相环路的基本方程：

\begin{align}
	\theta _e\left( t \right) &=\theta _1\left( t \right) -\theta _2\left( t \right) \\
	\theta _2\left( t \right) &=U_d\sin \left[ \theta _e\left( t \right) \right] \cdot F\left( p \right) \cdot \frac{K_0}{p} 
							   =\sin \left[ \theta _e\left( t \right) \right] \cdot K\cdot F\left( p \right) \cdot \frac{1}{p}
\end{align}

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=1.3]{pdf/PLL_Phase_model.pdf}
	\caption{锁相环路的相位模型}
	\label{pdf:PLL_Phase_model}
\end{figure}

式中$K=U_dK_0=K_dK_0$为环路增益，为线性鉴相器的鉴相增益或灵敏度，数值上等于正弦鉴相特性的输出最大电压值$U_d$
当$\mid \theta _e\left( t \right) \mid \le 30°$时，$\sin \left[ \theta _e\left( t \right) \right] $可用$\theta _e\left( t \right) $代替，
锁相环的 基本数学方程式由非线性变为线性方程：

\begin{equation}
	\theta _2\left( t \right) =\left[ \theta _1\left( t \right) -\theta _2\left( t \right) \right] \cdot K\cdot F\left( p \right) \cdot \frac{1}{p}
\end{equation}

对上式两边取拉氏变换，就可以得到相应的复频域中的线性相位模型，如图\ref{pdf:PLL_Fre_model}所示。

\begin{equation}
	\varTheta _2\left( s \right) =\left[ \varTheta _1\left( s \right) -\varTheta _2\left( s \right) \right] \cdot K\cdot F\left( s \right) \cdot \frac{1}{s}
\end{equation}

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=1.3]{pdf/PLL_Fre_model.pdf}
	\caption{锁相环的线性相位模型（复频域）}
	\label{pdf:PLL_Fre_model}
\end{figure}

综上所述，可以得到锁相环的传递函数如下

\begin{align}
	\text{闭环传递函数：}&H\left( s \right) =\frac{\varTheta _2\left( s \right)}{\varTheta _1\left( s \right)}=\frac{KF\left( s \right)}{s+KF\left( s \right)} \\
	\text{误差传递函数：}&H_e\left( s \right) =\frac{\varTheta _e\left( s \right)}{\varTheta _1\left( s \right)}=\frac{s}{s+KF\left( s \right)} \\
	\text{开环传递函数：}&H_o\left( s \right) =\frac{\varTheta _2\left( s \right)}{\varTheta _1\left( s \right)}_{\text{开环}}=\frac{KF\left( s \right)}{s}
\end{align}

其中$F(s)$是环路滤波器的传递函数，可见其对环路参数调整起到决定性的作用，根据$F(s)$的不同，可将锁相环路分为一阶、二阶以至更高的形式。

\subsubsection{合成传递函数及其参数分析}

将环路滤波器的传递函数$F(s)$带入锁相环的传递函数便可得到锁相环总的传递函数，使用RC积分滤波器、无源比例积分滤波器和有源比例积分滤波器的锁相环传递函数分别如下：

\begin{align}
	H_1\left( s \right) &=\frac{K}{\tau s^2+s+K} \\
	H_2\left( s \right) &=\frac{K\left( s\tau _2+1 \right) /\left( \tau _2+\tau _2 \right)}{s^2+s\left( 1+K\tau _2 \right) /\left( \tau _1+\tau _2 \right) +K/\left( \tau _1+\tau _2 \right)} \\
	H_3\left( s \right) &=\frac{K\left( s\tau _2+1 \right) /\tau _1}{s^2+s\left( K\tau _2/\tau _1 \right) +K/\tau _1}
\end{align}

为了方便分析，通常将它们改写为如下形式：

\begin{align}
	H_1\left( s \right) &=\frac{\omega _{\text{n}}^{2}}{s^2+2\xi \omega _{\text{n}}s+\omega _{\text{n}}^{2}} \\
	H_2\left( s \right) &=\frac{s\omega _{\text{n}}\left( 2\xi -\omega _{\text{n}}/K \right) +\omega _{\text{n}}^{2}}{s^2+2\xi \omega _{\text{n}}s+\omega _{\text{n}}^{2}} \\
	H_3\left( s \right) &=\frac{2\xi \omega _{\text{n}}s+\omega _{\text{n}}^{2}}{s^2+2\xi \omega _{\text{n}}s+\omega _{\text{n}}^{2}}
\end{align}

其中$\omega _{\text{n}}$称为锁相环路的固有角频率,$\xi $称为环路的阻尼系数。对于不同滤波器的$\omega _{\text{n}}$，$\xi $表达式如下表所示。

\begin{table}[h!]
    \centering
    \resizebox{1.0\textwidth}{!}{% 放大到原来的1.2倍宽度
        \begin{tabular}{|c|c|c|c|}
            \hline
            & $RC$ 积分滤波器 & 无源比例积分滤波器 & 有源比例积分滤波器 \\
            \hline
            $\omega_n$ & $\left(\frac{K}{\tau}\right)^{1/2}$ & $\left(\frac{K}{\tau_1 + \tau_2}\right)^{1/2}$ & $\left(\frac{K}{\tau_1}\right)^{1/2}$ \\
            \hline
            $\zeta$ & $\frac{1}{2}\left(\frac{1}{\tau K}\right)^{1/2}$ & $\frac{1}{2}\left(\frac{K}{\tau_1 + \tau_2}\right)^{1/2}\left(\tau_2 + \frac{1}{K}\right)$ & $\frac{\tau_2}{2}\left(\frac{K}{\tau_1}\right)^{1/2}$ \\
            \hline
        \end{tabular}
    }
    \caption{不同类型的积分滤波器参数对比}
    \label{tab:filter_parameters}
\end{table}

阻尼系数$\xi$取不同值时,采用有源比例积分滤波器和RC积分滤波器的锁相环路幅频特性曲线分别如图\ref{pdf:H3}、\ref{pdf:H1}所示。

\begin{figure}[htbp]
	\centering
    \begin{minipage}[t]{0.48\textwidth}
		\centering
		\includegraphics[scale=0.5]{pdf/H3.pdf}
		\caption{采用有源比例积分滤波器的幅频特性}
		\label{pdf:H3}
    \end{minipage}
    \hfill
    \begin{minipage}[t]{0.48\textwidth}
		\centering
		\includegraphics[scale=0.5]{pdf/H1.pdf}
		\caption{采用RC积分滤波器的幅频特性}
		\label{pdf:H1}
    \end{minipage}
\end{figure}

简要分析两参数的实际意义：

较小的$\xi $（阻尼系数）可以获得更快的更快的响应速度，相反较大的$\xi$可以提高系统的稳定性并减少超调（系统响应在达到稳态值之前超过了最终稳定值的程度）。
综合各项考虑，通常取$\xi =0.707$,此时系统接近最佳阻尼状态，这种状态下可以获得较为平滑的响应，同时保持较低的超调量和快速稳定时间。

固有角频率$\omega _{\text{n}}$直接影响系统的响应速度。较高的$\omega _{\text{n}}$意味着系统能够更快地响应输入的变化，具体表现为较短的上升时间和峰值时间。
换句话说，提高$\omega _{\text{n}}$可以使系统更快地达到其最终值或在响应瞬态输入时更快地完成过渡过程。
同时，较高的$\omega _{\text{n}}$通常对应着更宽的系统带宽，这意味着系统能更好地跟随高频输入信号或者抵抗高频噪声。
但是较高的$\omega _{\text{n}}$可能会导致系统更加难以稳定

所以在设计锁相环时需要综合考量，适当选取$\omega _{\text{n}}$、$\xi $、$K $的值。

在竞赛过程中，本实验室使用了三种锁相环芯片，分别是CD4046、LMX2571和ADF4351，下面主要介绍ADF4351。

\section{传递函数}
\subsection{传递函数相关理论与公式}
图\ref{反馈系统的典型结构}为反馈系统的典型结构，其中$R(s)$为给定信号，$B(s)$为反馈信号，$E(s)$为偏差信号，$Y(s)$为输出信号，$G(s)$为前向通道传递函数，$H(s)$为反向通道传递函数。
\begin{figure}[h]
	\centering
	\includegraphics[scale=0.8]{./fig/feedback_system_loop.png}
	\caption{反馈系统的典型结构}
	\label{反馈系统的典型结构}
\end{figure}

通常把信号输入点$R(s)$到信号输出点$Y(s)$的通道称为前向通道，前向通道上所有环节的传递函数之积定义为前向通道传递函数；把输出信号$Y(s)$到反馈信号$B(s)$的通道称为反馈通道，反向通道上所有环节的传递函数之积定义为反向通道传递函数。

当反馈极性为负时，偏差信号$E(s)$等于输入信号与反馈信号之差，即有：
\begin{equation}
\begin{split}
	Y(s)&=G(s)E(s)\\
	&=G(s)[R(s)-B(s)]\\
	&=G(s)[R(s)-Y(s)H(s)]\\
	&=G(s)R(s)-G(s)H(s)Y(s)
\end{split}
\end{equation}
整理可得系统负反馈时的闭环传递函数$G_B(s)$为：
\begin{equation}
	G_B(s)=\dfrac{Y(s)}{R(s)}=\dfrac{G(s)}{1+G(s)H(s)}
\end{equation}
通常将反馈信号$B(s)$与偏差信号$E(s)$之比定义为开环传递函数$G_K(s)$,结合上式即可得：
\begin{equation}
\begin{split}
	G_K(s)&=\dfrac{B(s)}{E(s)}=\dfrac{H(s)Y(s)}{R(s)-H(s)Y(s)}=\dfrac{H(s)\dfrac{Y(s)}{R(s)}}{1-H(s)\dfrac{Y(s)}{R(s)}}\\
	&=\dfrac{H(s)\dfrac{G(s)}{1+G(s)H(s)}}{1-H(s)\dfrac{G(s)}{1+G(s)H(s)}}=H(s)G(s)
\end{split}
\end{equation}
显然，开环传递函数$G_K(s)$是前向通道传递函数$G(s)$与反馈通道传递函数$H(s)$的乘积。

由此可见，负反馈控制系统的闭环传递函数、开环传递函数和前向通道传递函数符合下面的关系：
\begin{equation}
	\mbox{闭环传递函数}=\dfrac{\mbox{前向通道传递函数}}{1+\mbox{开环传递函数}}
\end{equation}


\subsection{锁相环传递函数}
由7.3知鉴相器的传递函数为$K_{pd}$,环路滤波器的传递函数为$H_{lpf}$，压控振荡器的传递函数为$\dfrac{K_{vco}}{s}$。相乘得到前路通道传递函数为：
\begin{equation}
	H_f(s)=K_{pd}H_{lpf}(s)\dfrac{K_{vco}}{s}
\end{equation}
根据开环传递函数公式：开环传递函数等于前向通道传递函数与反馈回路传递函数的乘积，而反馈回路传递函数$H(s)=\dfrac{1}{N}$，由此可得开环传递函数为：
\begin{equation}
	H_{open}(s)=H_f(s)H(s)=K_{pd}H_{lpf}(s)\dfrac{K_{vco}}{s}\dfrac{1}{N}
\end{equation}
又根据闭环传递函数公式可得：
\begin{equation}
	H_{cl}(s)=\dfrac{H_f(s)}{1+H_{open}}=\dfrac{K_{pd}H_{lpf}(s)\dfrac{K_{vco}}{s}}{1+\dfrac{1}{N}K_{pd}H_{lpf}(s)\dfrac{K_{vco}}{s}}=\dfrac{K_{pd}H_{lpf}(s)K_{vco}}{s+\dfrac{1}{N}K_{pd}H_{lpf}(s)K_{vco}}
\end{equation}

\section{相位裕度}
相位裕度（Phase Margin,PM）是控制系统中用于衡量系统稳定性的关键指标之一。
\subsection{相位裕度的定义}
相位裕度是指在系统的开环频率响应中，当增益为0dB（即增益为1）时，相位与-180°的差值，即：
\begin{equation}
	PM=180°+\Phi
\end{equation}
其中$\Phi$是系统在增益交界频率（即增益为1的频率点）处的相位。\\
当相位裕度为正时，系统是稳定的，这是因为系统在该频率处的相位距离-180°还有一定的“缓冲”，不会形成正反馈，从而避免振荡。通常设计在30°到60°之间。\\当相位裕度为负时，系统是不稳定的，系统容易形成正反馈，导致振荡或发散。

\subsection{零点和极点对相位的影响}
极点的影响：极点通常会导致系统的相位滞后。每个极点会随着频率的增加逐渐贡献更多的相位滞后。极点在低频段的相位贡献接近0°，在频率远高于极点频率时，极点的相位贡献接近-90°。对于一个具体的极点p,其相位贡献应用公式$\Phi_p(\omega)=-arctan\dfrac{\omega}{|p|}$计算。

零点的影响：左半平面的零点可以提供正相位补偿，从而提高系统的相位裕度。然而右半平面的零点会减少相位裕度。其相位贡献计算公式为$\Phi_z(\omega)=arctan\dfrac{\omega}{z}$。

对于一个简单的含有两个极点$p_1$和$p_2$以及一个零点$z_1$的的二阶系统，其相位裕度计算公式如下：
\begin{equation}
	PM=180°-arctan\dfrac{\omega}{|p_1|}-arctan\dfrac{\omega}{|p_2|}+arctan\dfrac{\omega}{z_1}
\end{equation}
其中$\omega$通常选择在系统的交界频率处，即系统的开环增益为1（0dB）的频率点。

\subsection{相位裕度的优化方法}
\begin{itemize}
	\item 增加零点：通过在系统中引入零点（如使用相位补偿器），可以增加相位裕度。
	\item 调整极点位置：通过改变系统的极点位置，减少低频相位滞后。
	\item 优化反馈网络：通过调整反馈网络的参数，改善系统的频率响应。
\end{itemize}

\section{滤波器的分类及其特点}

\subsection{简单RC低通滤波器}
最简单的一个环路滤波器就是一个简单的RC低通滤波器,如图\ref{RC_lowpass}所示：
\begin{figure}[h]
	\centering
	\includegraphics[scale=0.7]{./fig/simple_RC_lpf.png}
	\caption{简单RC低通滤波器}
	\label{RC_lowpass}
\end{figure}
其传递函数为：
\begin{equation}
	H_{lpf}(s)=\dfrac{1}{1+sRC}
\end{equation}
要知道这个简单RC滤波器对整个PLL的稳定性的影响，则需要知道开环传递函数，代入到PLL开环传递函数公式：
\begin{equation}
	H_{open}(s)=K_{pd}H_{lpf}(s)\dfrac{K_vco}{s}\dfrac{1}{N}=K_{pd}\dfrac{1}{1+sRC}\dfrac{K_{vco}}{s}\dfrac{1}{N}=\dfrac{K_{pd}K_{vco}}{s(1+sRC)}\dfrac{1}{N}
\end{equation}
可知一共有两个极点，一个是VCO引入的DC处的极点，一个是LPF引入的，在$-\dfrac{1}{RC}$处。
而闭环传递函数为：
\begin{equation}
	H_{cl}(s)=\dfrac{K_{pd}H_{lpf}(s)K_{vco}}{s+\dfrac{1}{N}K_{pd}H_{lpf}(s)K_{vco}}=\dfrac{K_{pd}\dfrac{1}{1+sRC}K_{vco}}{s+\dfrac{1}{N}K_{pd}\dfrac{1}{1+sRC}K_{vco}}=\dfrac{K_{pd}K_{vco}}{s^2RC+s+\dfrac{1}{N}K_{pd}K_{vco}}
\end{equation}
化简成二阶系统的标准形式：
\begin{equation}
	H_{cl}(s)=\dfrac{K_{pd}\dfrac{1}{1+sRC}K_{vco}}{s+\dfrac{1}{N}K_{pd}\dfrac{1}{1+sRC}K_{vco}}=\dfrac{K_{pd}K_{vco}}{s^2RC+s+\dfrac{1}{N}K_{pd}K_{vco}}=\dfrac{\dfrac{K_{pd}K_{vco}}{RC}}{s^2+\dfrac{s}{RC}+\dfrac{1}{NRC}K_{pd}K_{vco}}
\end{equation}
对比二阶系统传递函数的标准形式$H(s)=\dfrac{\omega_n^2}{s^2+2\delta\omega_ns+\omega_n^2}$可得：
\begin{equation}
	\mbox{自然频率}\omega_n=\sqrt{\dfrac{1}{NRC}K_{pd}K_{vco}}
\end{equation}
\begin{equation}
	\mbox{阻尼比}\delta=\frac{1}{2}\sqrt{\dfrac{N}{K_{pd}K_{vco}RC}}
\end{equation}
二阶系统的稳定性与由极点位置决定，需满足以下条件：
\begin{enumerate}
	\item 
	极点位置与稳定性
	\begin{itemize}
		\item 稳定系统：所有极点位于左半复平面
		\item 临界稳定：极点在虚轴上
		\item 不稳定系统：至少一个极点位于右半平面
	\end{itemize}
	\item 
	稳定性判据
	\begin{itemize}
		\item 代数判据：对于二阶系统稳定性条件是传递函数分母多项式所有系数均为正数。由于$\omega_n$为实数且$\omega_n>0$，即只需$\delta>0$即可保证稳定。
		\item 几何判据（根轨迹/奈奎斯特）：通过极点分布或频率响应曲线判断（更适用于高阶系统）。
	\end{itemize}
\end{enumerate}

其中$\delta$与稳定性强相关，$\delta$越大，稳定性越好。由关系式可以简单分析一下各参数之间的关系：
\begin{table}[h!]
	\centering
	\begin{tabular}{|c|c|}
		\hline
		N&N增大，$\delta$增大，稳定性提高；$\omega_n$下降，环路反应变慢\\
		\hline
		$K_{pd}*K_{vco}$&增大，$\delta$下降，稳定性变差；$\omega_n$增大，环路反应变快\\
		\hline
		$R*C$&增大，$\delta$下降，稳定性变差；$\omega_n$下降，环路反应变慢\\
		\hline
	\end{tabular}
\end{table}  

通常，锁相环的前馈增益是鉴相器增益、环路滤波器的传递函数和VCO增益的乘积，即有：
\begin{equation}
	A_{fwd}(s)=\dfrac{K_{pd}K_{vco}}{1+sRC}
\end{equation}
低频时，$A_{fwd}(0)=K_{pd}K_{vco}$,说明简单的RC滤波器从输入相位差到压控振荡器的频率输出增益不是无穷大，由于滤波器的增益有限，系统需要一个非零的输入相位差来产生足够的控制电压，从而驱动VCO输出所需的频率。如果输入相位差过小，经过滤波器后的控制电压可能不足以驱动VCO。

上述为一类锁相环：其主要缺点是直流前向环路增益为有限值，导致存在非零的输入相位差。
下面将介绍二类锁相环，即具有无穷大的直流前向环路增益。


\begin{figure}[htbp]
	\centering
	\begin{subfigure}{0.325\linewidth}
		\centering
		\includegraphics[width=0.9\linewidth]{./fig/single_capacitance_filter.png}
		\caption{单电容滤波器}
		\label{单电容滤波器}
	\end{subfigure}
	\centering
	\begin{subfigure}{0.325\linewidth}
		\centering
		\includegraphics[width=0.5\linewidth]{./fig/filter_with_compensating_resistance.png}
		\caption{加入补偿电阻的滤波器}
		\label{加入补偿电阻的滤波器}
	\end{subfigure}
	\centering
	\begin{subfigure}{0.325\linewidth}
		\centering
		\includegraphics[width=0.6\linewidth]{./fig/filter_with_high_frequency_small_capacitance.png}
		\caption{加入高频滤波小电容的滤波器}
		\label{加入高频滤波小电容的滤波器}
	\end{subfigure}
	\caption{}
\end{figure}

\subsection{单电容结构}
利用积分器实现无穷大的增益，而最简单的积分器就是电容，如图\ref{单电容滤波器}，其传递函数为：
\begin{equation}
	H_{lpf}(s)=\dfrac{1}{sC}
\end{equation}
代入到PLL的开环传递函数公式可得开环传递函数为：
\begin{equation}
	H_{open}(s)=K_{pd}H_{lpf}(s)\dfrac{K_{vco}}{s}\dfrac{1}{N}=K_{pd}\dfrac{1}{sC}\dfrac{K_{vco}}{s}\dfrac{1}{N}=\dfrac{K_{pd}K_{vco}}{s^2CN}
\end{equation}
环路中有两个极点，都在DC处（低频段），根据公式$\Phi_p(\omega)=-arctan\dfrac{\omega}{|p|}$计算得系统在增益交界频率处的相位为-180°，因此相位裕度为零，说明这种结构的锁相环是不稳定的。

\subsection{加入补偿电阻结构}
对上面结构进行相位补偿，可以尝试串联一个电阻，形成一个零点，利用零极点抵消，进行频率补偿，如图\ref{加入补偿电阻的滤波器},其传递函数为：
\begin{equation}
	H_{lpf}(s)=R+\dfrac{1}{sC}
\end{equation}
代入到PLL的开环传递函数公式可得开环传递函数为：
\begin{equation}
	H_{open}(s)=K_{pd}H_{lpf}(s)\dfrac{K_{vco}}{s}\dfrac{1}{N}=K_{pd}(R+\dfrac{1}{sC})\dfrac{K_{vco}}{s}\dfrac{1}{N}=\dfrac{K_{pd}K_{k_{vco}}}{sN}\dfrac{1+sRC}{sC}
\end{equation}
环路中有两个极点都在DC处，还有一个零点位于$-\dfrac{1}{RC}$。引入了零点，相位裕度为正，所以这种电路有比较好的环路稳定性。但缺点是对高频滤波效果不是特别好。

\subsection{加入高频滤波小电容结构}
实际应用时，为了进一步对高频进行滤波，主要为了减少电压波动和高频噪声，在上面的结构中加入一个小电容，其中电容$C_1$远远小于$C_0$,如图\ref{加入高频滤波小电容的滤波器},其传递函数为：
\begin{equation}
	H_{lpf}(s)=(R+\dfrac{1}{sC_0})||\dfrac{1}{sC_1}=\dfrac{(R+\dfrac{1}{sC_0})\dfrac{1}{sC_1}}{R+\dfrac{1}{sC_0}+\dfrac{1}{sC_1}}=\dfrac{1+sRC_0}{s^2RC_0C_1+s(C_0+C_1)}
\end{equation}
代入到PLL的开环传递函数公式可得开环传递函数为：
\begin{equation}
	H_{open}(s)=\dfrac{K_{pd}K_{vco}}{sN}\dfrac{1+sRC_0}{s^2RC_0C_1+s(C_0+C_1)}
\end{equation}
可以得到三个极点和一个零点：
\begin{equation*}
	p_0=p_1=0
\end{equation*}
\begin{equation*}
	p_2=-\dfrac{C_0+C_1}{RC_0C_1}
\end{equation*}
\begin{equation*}
	z_0=-\dfrac{1}{RC_0}
\end{equation*}
由于$C_1$远远小于$C_0$,所以$p_2\approx-\dfrac{1}{RC_1}$，由于多了一个极点，虽然增加了高频滤波，但是降低了相位裕度。对于这三个器件的一个常用设计：

零点频率一般是$-3dB$截止频率的$\dfrac{1}{4}$，高频极点$p_2$一般是$-3dB$的4倍，即$C_0$是$C_1$的16倍，这个时候相位裕度为：
\begin{equation}
	PW=180°-180°+arctan\dfrac{\omega_{-3dB}}{w_{z_0}}-arctan\dfrac{\omega_{-3dB}}{w_{p_2}}=arctan(4)-arctan\dfrac{1}{4}=62°
\end{equation}
在$-3dB$带宽附近，我们可以认为，积分电容$C_0$处于短路状态，高频滤波小电容$C_1$处于开路状态，所以整个环路滤波器的阻抗近似表示为R。
在整个环路中，我们可以得到前向增益等于反馈分频器的分频比，即有：
\begin{equation}
	K_{pd}H_{lpf}(s)\dfrac{K_{vco}}{s}=N
\end{equation}
在$-3dB$带宽处，环路增益为1，并将$H_{lpf}(s)=R$代入开环传递函数中可以得到：
\begin{equation}
	H_{open}=K_{pd}R\dfrac{K_{vco}}{\omega_{-3dB}N}=1
\end{equation}
\begin{equation}
	\omega_{-3dB}=\dfrac{K_{pd}K_{vco}R}{N}
\end{equation}
又因为鉴相器增益$K_{pd}$与电荷泵电流$I_{cp}$成正比，即有；
\begin{equation}
	K_{pd}=\dfrac{I_{cp}}{2\pi}
\end{equation}
则：
\begin{equation}
	\omega_{-3dB}=\dfrac{I_{cp}}{2\pi}\dfrac{K_{vco}}{N}R
\end{equation}
所以$\omega_{-3dB}$与电容的取值无关。\\

当然还有更高类型的环路滤波器，加更多的RC滤波在里面，但是求解起来就比较复杂了，可以通过仿真软件进行进一步模拟，后面我们将介绍PLLsim软件。

\section{相位裕度最大求解及环路滤波器电路设计}
由上文我们知道$PM=arctan\dfrac{\omega}{w_{z_0}}-arctan\dfrac{\omega}{w_{p_2}}$，其中
\begin{equation}
	w_{z_0}=\dfrac{1}{RC_0}
\end{equation}
\begin{equation}
	w_{p_2}=\dfrac{C_0+C_1}{RC_0C_1}
\end{equation}
再引入一个变量：
\begin{equation}
	C_1=mC_0
\end{equation}
\begin{equation}
	w_{p_2}=\dfrac{C_0+C_1}{RC_0C_1}=\dfrac{C_0+mC_0}{RC_0mC_0}=\dfrac{1+m}{RC_0m}=\dfrac{1+m}{m}w_{z_0}=B\omega_{z0}
\end{equation}
其中$B=\dfrac{1+m}{m}=1+\dfrac{C_0}{C_1}$，与两电容的比值有关。
\begin{equation}
	PM=arctan\dfrac{\omega}{w_{z_0}}-arctan\dfrac{\omega}{w_{p_2}}=arctan\dfrac{\omega}{w_{z_0}}-arctan\dfrac{\omega}{Bw_{z_0}}=arctan(\dfrac{(B-1)w_{z_0}\omega}{Bw_{z_0}^2+\omega^2})
\end{equation}
Arctan是单调函数，所以只需要对$(\dfrac{(B-1)w_{z_0}\omega}{Bw_{z_0}^2+\omega^2})$求极值就可以了，得到：
\begin{equation}
	\omega_{max\_opt}=\sqrt{B}w_{z_0}
\end{equation}
代入得相位裕度最大值：
\begin{equation}
\begin{split}
	PM\_max&=arctan\dfrac{\omega}{w_{z_0}}-arctan\dfrac{\omega}{w_{p_2}}\\
	&=arctan\dfrac{\omega}{w_{z_0}}-arctan\dfrac{\omega}{Bw_{z_0}}\\
	&=arctan\sqrt{B}-arctan\dfrac{1}{\sqrt{B}}\\
	&=arctan\dfrac{\sqrt{B}-\dfrac{1}{\sqrt{B}}}{2}
\end{split}
\end{equation}

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.8]{./fig/Matlab_PM_B.png}
	\caption{PM-B关系图象}
	\label{PM-B}
\end{figure}

在Matlab中绘出PM-B关系图像，如图\ref{PM-B}。观察可知：B的值一般大于13会比较好，此时相位裕度大于60°，系统比较稳定。综上所述，计算所涉及的几个公式汇总如下：
\begin{gather}
	PM\_max=arctan\dfrac{\sqrt{B}-\dfrac{1}{\sqrt{B}}}{2} \tag{公式1}\\
	w_{z_0}=\dfrac{1}{RC_0} \tag{公式2}\\
	w_{p_2}=\dfrac{C_0+C_1}{RC_0C_1}=Bw_{z_0} \tag{公式3}\\
	\omega_{max\_opt}=\sqrt{B}w_{z_0} \tag{公式4}\\
	\omega_{-3dB}=\dfrac{K_{pd}K_{vco}R}{N}=\dfrac{I_{cp}}{2\pi}\dfrac{K_{vco}}{N}R \tag{公式5}\\
	B=\dfrac{1+m}{m}=1+\dfrac{C_0}{C_1} \tag{公式6}
\end{gather}
所以我们的设计思路就比较清晰了：\\
公式5：根据实际需要，我们需要一个环路带宽$\omega_{-3dB}$（环路带宽$\omega_c$与截止频率$\omega_{-3dB}$通常很接近），这样我们就得到了电阻R；\\
公式1：选取一个B值，假设就是处于最佳的PM值；\\
公式4：计算出$w_{z_0}$\\
公式2：计算出$C_0$\\
公式6：计算出$C_1$

其实，在上面我们以想要的$\omega_{-3dB}=\omega_{max\_opt}=\omega_c$为最终确定量。那么我们就可以得到器件参数之间的折中关系。
利用
\begin{equation}
	\omega_c=\dfrac{I_{cp}}{2\pi}\dfrac{K_{vco}}{N}R
\end{equation}
所以
\begin{equation}
	R=\dfrac{2\pi}{K_{vco}}\dfrac{N}{I_{cp}}\omega_c
\end{equation}
利用
\begin{equation}
	\omega_{max\_opt}=\omega_c=\sqrt{B}w_{z_0}=\sqrt{B}\dfrac{1}{RC_0}
\end{equation}
所以
\begin{equation}
	C_0=\sqrt{B}\dfrac{1}{R\omega_{-3dB}}=\sqrt{B}\dfrac{I_cp}{2\pi}\dfrac{K_{vco}}{N}\dfrac{1}{\omega_c^2}
\end{equation}
\begin{equation}
	C_1=\dfrac{C_0}{B-1}
\end{equation}
所以我们得到了环路滤波器的参数选取表达式：
\begin{gather}
	R=\dfrac{2\pi}{K_{vco}}\dfrac{N}{I_{cp}}\omega_c\\
	C_0=\sqrt{B}\dfrac{I_{cp}}{2\pi}\dfrac{K_{vco}}{N}\dfrac{1}{\omega_c^2}\\
	C_1=\dfrac{C_0}{B-1}
\end{gather}
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.5]{./fig/ADF4351_circuit.png}
	\caption{ADF4351模块电路图}
	\label{ADF4351模块电路图}
\end{figure}
\begin{figure}[htbp]
	\centering
	\includegraphics[scale=1.0]{./pdf/ADF4351_internal_structure.pdf}
	\caption{ADF4351内部结构框图}
	\label{ADF4351内部结构框图}
\end{figure}

\section{ADF4351电路设计和PLLsim软件使用}
实验室所使用的ADF4351锁相环模块大致分为两个部分，分别为供电模块和ADF4351及其周围电路。本节主要介绍ADF4351及其周围电路。图\ref{ADF4351模块电路图}为ADF4351模块电路图，图\ref{ADF4351内部结构框图}为ADF4351内部结构框图。

对于ADF4351及其周围电路，100MHz晶振为ADF4351提供参考源，所输出的信号从REFIN引脚进入ADF4351电路模块，在ADF4351内部结构中依次经过倍频分频，鉴相器，电荷泵，从CPOUT端输出，来到外部环路滤波电路，将高频的电流或电压脉冲转换成低频信号，再从VTUNE端进入ADF4351电路模块，在VCO处将电压信号转换成相位信号，经分频器反馈到鉴相器与100MHz进行比较，多次循环直至输入信号与参考源相近，最后从RFOUTA+和RFOUTA-分别输出一个正向，一个反向的差分信号。

参考芯片手册，CLK,DATA,LE,CE四个引脚由单片机控制;SW为快速锁定开关，在使用快速锁定模式时，必须将环路滤波器与此引脚相连，且环路滤波器中的阻尼电阻降至宽带宽模式下该电阻值的$\dfrac{1}{4}$。（如果锁相环的抖动主要由外部信号噪声引起，那么环路带宽应该越窄越好，这样可以抑制外部信号噪声，尤其是参考信号中的噪声；如果需要有效抑制压控振荡器的噪声，并且获得良好的跟踪和捕获性能，环路带宽应越宽越好。）为实现较宽的环路滤波器带宽，电荷泵电流增大16倍，而为了保持环路稳定，阻尼电阻必须减小$\dfrac{1}{4}$。要使能快速锁定，需将寄存器3中的位
[DB16:DB15]设置为01，使SW引脚对AGND引脚短路；可用的拓扑结构有两种，分别如图\ref{快速锁定环路滤波器拓扑1}和\ref{快速锁定环路滤波器拓扑2}。\\
\begin{itemize}
	\item 对于第一种结构：阻尼电阻(R1)分为两个值(R1和R1A)，二者之比为1:3。
	\item 对于第二种结构：直接从SW连一个额外电阻(R1A)，该额外
	电阻与阻尼电阻(R1)的并联结果应为R1初始值的$\dfrac{1}{4}$。
\end{itemize}
\begin{figure}[htbp]
	\centering
	\begin{subfigure}{0.48\linewidth}
		\centering
		\includegraphics[width=0.9\linewidth]{./fig/sw_structure1.png}
		\caption{快速锁定环路滤波器拓扑1}
		\label{快速锁定环路滤波器拓扑1}
	\end{subfigure}
	\centering
	\begin{subfigure}{0.48\linewidth}
		\centering
		\includegraphics[width=0.9\linewidth]{./fig/sw_structure2.png}
		\caption{快速锁定环路滤波器拓扑2}
		\label{快速锁定环路滤波器拓扑2}
	\end{subfigure}
	\caption{}
\end{figure}

$V_p$,AVDD,PDBRF,DVDD,SDVDD接电源引脚；$V_{vco}$为VCO电源，范围为3.0v~3.6v,将去耦电容放置到模拟接地层并尽可能靠近这些引脚，且其值必须与AVDD相同；TEMP为温度补偿输出，将去耦电容放置到接地层并尽可能靠近此引脚；CPGND,AGND,AGNDVCO,DGND,SDGND接地；$R_{set}$与地之间连一个电阻可设置电荷泵输出电流；VCOM为内部补偿节点，偏置调谐范围的一半，将去耦电容放置到接地层并尽可能靠近此引脚；VREF为基准电压，将去耦电容放置到接地层并尽可能靠近此引脚；LD为锁定检测输出引脚，此引脚输出逻辑高电平时表示PLL锁定，逻辑低电平输出表示PLL失锁；PDBRF引脚为逻辑低电平时，RF输出静音，此功能也是软件可编程的；MUXOUT为多路复用器输出，此多路复用器输出允许从外部访问锁定检测值、N分频器值或R分频器值，与单片机相连。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.7]{./fig/PLLsim_ADF4351.png}
	\caption{PLLsim参数设置界面}
	\label{PLLsim参数设置界面}
\end{figure}
对于环路滤波器，原理图中的滤波器为一个三阶的无缘滤波器，由于计算复杂，可利用PLLsim软件，如图\ref{PLLsim参数设置界面}。其中Ref.Freq为输入频率，N为分频比，$I_{cp}$为电荷泵电流，KVCO大小，Loop Bw为环路带宽，Phase Margin为相位裕度，Attenuation为衰减量。配置完成之后点击Calculate生成元器件参数。

\section{Costas环原理和仿真}
Costas环是一种用于载波恢复的锁相环结构，特别适用于数字调制信号的同步与解调。它由美国工程师John P. Costas于20世纪50年代提出，最初用于雷达信号处理。Costas环通过非线性混频器结构实现对载波相位和频率的估计与跟踪，能够有效抑制相位噪声和频偏。

相比传统的锁相环，Costas环特别适合于抑制调制信号中的符号干扰,如图\ref{fig:costas_loop_structure}所示，广泛应用于相位调制（如BPSK、QPSK）和幅度相位调制信号的解调。其核心思想是将接收到的信号经过两个乘积混频器，一路乘以本地载波正弦信号，另一路乘以余弦信号，随后通过乘积结果产生误差信号，反馈调整本地振荡器的相位，实现载波锁定。

Costas环的优势在于其结构简单、稳定性好、能实现盲载波同步，且对噪声环境具有较强的鲁棒性，因而成为现代数字通信系统中载波同步的经典方案之一。

\begin{figure}[!htbp]
	\centering
	\includegraphics[scale=0.6]{./fig/figure-phase-sync-costas-loop-bpsk.png}
	\caption{Costas环结构示意图}
	\label{fig:costas_loop_structure}
\end{figure}

\appendix

\chapter{单片机相关知识}
\label{chapter_mcu}
STM32是意法半导体（STMicroElectronics）生产的32位微控制器集成电路系列。 STM32芯片分为基于相同32位ARM处理器内核的相关系列：Cortex-M0、Cortex-M0+、Cortex-M3、Cortex-M4、Cortex-M7、Cortex-M33。每个微控制器内部均由ARM处理器内核、闪存、静态RAM、调试接口和各种外设组成。在参加竞赛过程中，实验室使用了F1、F4和H7三款单片机。从2023年开始，实验室单片机均为自行设计制作，不再从市场上购买成品，如表\ref{tab:cortex}所示。

\begin{table}
    \centering
    \caption{STM32单片机核心和应用情况}
    \begin{tabular}{|l|l|c|}
    \hline
    \textbf{STM32 系列} & \textbf{基于ARM的CPU内核} & 实验室应用型号 \\ \hline
    F0 & Cortex-M0 & ~ \\ \hline
    F1, F2, L1 & Cortex-M3 & STM32F103 \\ \hline
	F3, F4, G4, L4, L4+ & Cortex-M4  & STM32F407  \\ \hline
	WB, WL & M4 \& M0+ (双核)  &~  \\ \hline
	F7 & Cortex-M7  &~  \\ \hline
	H7 & M7 (单核), M7 \& M4 (双核)  &STM32H743  \\ \hline
	H5, L5, U5, WBA & Cortex-M33  &~  \\ \hline
	MP1	&MP131, 133, 135, 151, 153, 157  &~  \\ \hline
            \end{tabular}
	\label{tab:cortex}
\end{table}

单片机承担了竞赛中的控制和计算角色，特别是通信信号处理，需要使用数字滤波器、快速傅里叶变换等基础计算，均使用F4和H7单片机中的浮点处理单元和CMSIS-DSP（Cortex Microcontroller Software Interface Standard - Digital Signal Processing）库完成。

在本章中，将首先介绍单片机的硬件电路部分和焊接调试方法，特别是如何将底板与AD/DA板分别设计以方便竞赛使用，然后阐述使用HAL库进行开发的基本步骤，最后介绍单片机软件在竞赛中如何用于实时信号处理。

\section{STM32H743硬件}

\section{HAL库开发基本知识}

\subsection{TIM+ADC+DMA如何配置}
这一小节的单片机使用的是STM32F407ZGT6，此单片机主要负责两项内容
AD9854的控制以及输出信号的采集，AD9854的驱动大家可以在网上找到相应的代码驱动，只需使用CubeMx打开相应的IO口就可以直接使用，这里主要讲解一下如何使用STM32F407的ADC模块进行信号采集。

\subsubsection{TIM配置}
我们首先需要一个定时器来触发ADC，这样我们就可以通过改变定时器的计数频率来使ADC达到我们想要的采样频率。使用CubeMx进行TIM的配置，我这里选用的是TIM2，大家可以自由选择自己想要的定时器。我们在Clock Sorec这一选项中选择Internal Clock，如图\ref{TIM_1}.，这样TIM2就有了时钟源。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.3]{./fig/TIM-clock.png}
	\caption{TIM时钟源选择}
	\label{TIM_1}
\end{figure}


接下来进行TIM2具体的配置，这里简单介绍一下各个参数的含义，如图\ref{TIM_2}.

Prescaler：这是定时器的预分频系数，0代表不分频可以写成1-1。这个参数如果是1就是进行2分频，可以写成2-1，这样记得话减号前面的数就是进行了多少分频，可以方便大家记忆。

Counter Mode：这个是计数的方式，一般选用Up进行向上计数，也就是从0开始每次递增1。

Counter Period：这个是计数的次数，写成1000-1，计数方式为Up，定时器就会从0开始往上计数，记到999结束，从0到999也就是计数了1000次，所以1000-1这个写法就是为了方便大家记忆，1000就是计数的次数。

Internal Clock Division：这个参数使用的很少，应该是对时钟的分频，大家可以自行了解。

auto—reload period：自动重装载，将他使能（enable）之后，TIM在完成一次0到1000-1的计数后会自动返回0，不断的循环计数。因为我们需要TIM来触发ADC，所以这个配置需要打开。

Master/Slave Mode：这个在竞赛中使用到不多，需要大家自行去了解。

Trigger Event Selection：这个参数用于配置定时器触发的事件，我们一般使用Updata Event，这样就可以配合ADC进行采样频率的控制。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.3]{./fig/TIM-disposition.png}
	\caption{TIM配置}
	\label{TIM_2}
\end{figure}

\subsubsection{ADC相关配置}
首先任选一个ADC的通道打开，我这里使用的是IN1，也就是通道1，如图\ref{ADC_1}.

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.3]{./fig/ADC-channel.png}
	\caption{ADC通道选择}
	\label{ADC_1}
\end{figure}

ADC是一个比较复杂的外设，这里简单介绍一下可能会使用到的参数的具体含义，如图\ref{ADC_2}.

Clock Prescaler：对ADC的时钟进行分频，因为ADC的时钟频率高了采样可能会不太稳定，一般可选择4分频

Resolution：ADC的分辨率，STM32F4最高支持12位的分辨率，也就是0-4095（$2^{12}-1$）,他将0-3.3V分割为4096份，所以最小的分辨率在0.3mV左右，精度是非常高的。

Data Alignment：数据的对齐方式，一般使用右对齐（Right Alignment）。

Scan Conversion Mode：扫描模式，一般不使用。在ADC开启多个通道的时候会依次打开各个通道进行数据的采集。电赛中使用的不多。

Continuous Conversion Mode：连续转换模式，没怎么用过，大家关闭就行。

Discontinuous Conversion Mode：同上一个，没怎么用过，大家关闭就行。

DMA Continuous Request：DMA的连续请求，这个需要打开，用于开启DMA来搬运ADC的数据。

External Trigger Conversion Source：这是选择ADC的触发源，之前已经开启了TIM2的Updata
Event，这里使用TIM2的事件来触发ADC，这样就可以使用TIM2来控制ADC的采样频率。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.3]{./fig/ADC-disposition.png}
	\caption{ADC配置}
	\label{ADC_2}
\end{figure}

\subsubsection{DMA相关配置}
之前我们打开了DMA的连续请求，这是因为DMA的存在可以把ADC采集的数据直接存放起来，不需要经过
CPU，所以DMA的存在使得ADC的采集可以完全独立于CPU而运行，这对于程序的速度还是后面数字滤波器的使用都有非常重要的意义，这里简单介绍一下DMA的配置，如图\ref{DMA_1}.

Mode：DMA的模式有两种，Normal和Circular，使用NormalDMA对ADC的数据只进行一次搬运，比如说代码中设置的是DMA搬运100次数据存放到一个数组中，那么DMA搬运完成一次之后就停止了搬运。当你打开Circular模式，在完成一次搬运之后，DMA会回到数组的开头，再次进行搬运，这会覆盖原有的数据，在2019D中DMA不太用得到循环模式。

Data With：数据的宽度，Half word就是半个字，也就是16位，word是32位。之前我们有讲到ADC的分辨率是12位，也就是需要12位的二进制数来存储ADC的数据，不过实际上ADC的数据长度是16位，只不过是数据的前4位没有用到，所以之前我们还有一个选项就是数据的对齐方式。这里我们将DMA的字宽改为半个字。

\begin{figure}[htbp]
	\centering
	\includegraphics[scale=0.3]{./fig/DMA-disposition.png}
	\caption{DMA配置}
	\label{DMA_1}
\end{figure}

\subsubsection{如何在代码中调控ADC采样频率}


\begin{figwindow}[0,r, {\includegraphics[width=3cm]{./fig/project-tim.png}}, picinpar]
我们之前是在CubeMx配置的过程中，通过TIM的预分频系数和计数次数来改变TIM触发事件的频率，那我应该如何在代码中对TIM的采样频率进行控制来实现不同的ADC采样频率呢？这里给大家简单介绍一下。
首先大家可以打开CubeMx为我们生成的TIM的初始化代码tim.c，如右图。打开后我们就可以看到CubeMx为我们生成的有关TIM的初始化的代码。
\end{figwindow}

\newpage

\begin{lstlisting}
void MX_TIM2_Init(void)
{
	TIM_ClockConfigTypeDef sClockSourceConfig = {0};
	TIM_MasterConfigTypeDef sMasterConfig = {0};
	
	htim2.Instance = TIM2;
	htim2.Init.Prescaler = 1-1;
	htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
	htim2.Init.Period = 100-1;
	htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
	htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
	if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
	{
		Error_Handler();
	}
	sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
	if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
	{
		Error_Handler();
	}
	sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
	sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
	if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
	{
		Error_Handler();
	}
}

\end{lstlisting}

我们可以看到CubeMx为我们生成的代码基本就是之前配置过程中我们调整的参数，在这里面找到htim2.Init.Prescaler = 1-1;以及htim2.Init.Period = 100-1;这个就是我们设置的预分频系数和计数次数，我们可以引入两个变量pre和arr用来对上面进行幅值

\begin{lstlisting}
	htim2.Init.Prescaler = pre-1;
	htim2.Init.Period = arr-1;

\end{lstlisting}

之后我们只需要对pre和arr幅值我们想要的值，然后调用MX\_TIM2\_Init()函数就可以实现在代码中改变ADC的采样频率。


不过这个方法是我刚进行电赛培训时的想法，整体还是比较繁琐的，我们起始还可以使用寄存器操作来实现TIM预分频和计数次数的改变。
\begin{lstlisting}
	TIM2->CNT= arr-1;
\end{lstlisting}
上面的代码使用了指针对CNT寄存器的值进行幅值，当然我们也可以直接读取CNT寄存器的值。有关预分频稀疏的寄存器我没有太多的使用过，需要大家自行去了解了。

\subsubsection{小结}
这些就是ADC常用的配置，在使用ADC之前，首先需要打开几个TIM作为ADC的触发时钟源，然后将ADC的触发事件改为定时器更新事件，再将DMA按需要配置位循环还是单次，记得将字宽改为半个字。整体上TIM+ADC+DMA的配置还是较为复杂的，但这也是我们高频类题使用最多的组合，希望大家多进行练习。

\subsection{正点原子LCD驱动以及触摸屏的使用}
\subsection{DSP库的添加以及FFT的使用}
\subsection{数字滤波器工程的搭建}
\subsection{常用模块使用需知}


\renewcommand\indexname{索~~引}
\printindex
\addcontentsline{toc}{chapter}{索~引}
\backmatter
\addcontentsline{toc}{chapter}{参考文献}
\bibliographystyle{unsrt}
\bibliography{ref}

\chapter{后~~记}
后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容后记内容
\begin{flushright}
作~~者 李窦哲 童佳旖 郭斌文 孙靖博 和实验室所有参与学习的同学们
2024年9月~~~~
\end{flushright}
\end{document}
